我有一个自定义列表视图,其中包含按钮作为项目。
我想将Listener设置为此按钮。目前我在适配器中使用以下代码来识别它。
holder.editDetails.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//rowItem.getUserID();
Toast.makeText(getContext(), "Done", Toast.LENGTH_SHORT).show();
}
});
无论如何在适配器外识别此按钮onclick事件。(在Main.class中)如
listView.setOnItemClickListener(new OnItemClickListener() {
});
抱歉我的英语不好
答案 0 :(得分:6)
您可以为其创建界面。将界面传递给适配器,并在单击按钮时调用它。
public interface onDoneClick{
void onClick(View v, int position);
}
在这个界面中,我们将传递适配器和视图上的位置。
接下来将界面添加到适配器的构造函数并将其保存在字段中。例如:
public MyAdapter(Context context, int textViewResourceId, List<MyObject> objects,onDoneClick listener ) {
super(context, textViewResourceId, objects);
mListener = listener;
}
现在我们的听众只需在你的 holder.editDetails 点击监听器上调用它:
@Override
public void onClick(View v) {
mListener.onClick(v,position);//where position is the position in the adapter
}
创建适配器时,在活动上单击下一步,只需将侦听器传递给它:
new MyAdapter(this, 0, myobjectList, new onDoneClick() {
@Override
public void onClick(View v, int position) {
//whatever you want to do.
}
});
答案 1 :(得分:2)
您可以使适配器成为您活动的内部类:
protected void onCreate(Bundle savedInstanceState) {
ListView listView;
listView.setAdapter(new CustomAdapter(...));
}
private void activityMethod() {
// Do something
}
/* Your custom adapter */
private class CustomAdapter extends ArrayAdapter<String> {
public CustomAdapter(Context context, int resource) {
super(context, resource);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
...
holder.editDetails.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
activityMethod();
}
});
...
}
}
然后,您就可以从适配器调用您的活动。
答案 2 :(得分:1)
此侦听器为您提供有关所单击视图的若干信息:
public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id)
一个很好的教程:http://www.ezzylearning.com/tutorial/handling-android-listview-onitemclick-event
但是你为整个视图设置了监听器,而不仅仅是按钮。
答案 3 :(得分:1)
您可以在Activity中创建一个方法,如:
public void setListenerToButton(Button b){
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//rowItem.getUserID();
Toast.makeText(getContext(), "Done", Toast.LENGTH_SHORT).show();
}
});
}
和getView内部
((YourActivity)getContext()).setListenerToButton(holder.editDetails);
答案 4 :(得分:1)
如果您的Activity
是ListActivity
,则可以使用onItemClick
:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// TODO
}