在我看来 - 是的,你是对的,事件处理程序应该在 Activity/Fragment 中,包含 ListView,而不是在 Adapter。
也许我在这种情况下的方法并不理想,但这里是:
例如,我在 Adapter 中(或在其外部)创建了一个接口
public interface MyAdapterCallback {
void buttonClicked(int buttonId, int position, int param2);
}
当然,您可以传递任意数量的参数。
在Adapter 构造函数中,我传递了对象的实例,实现了这个接口(@987654327@ 本身)。
然后我的Activity 实现了这个接口并覆盖了buttonClicked(),在那里我做了想要的操作。
在 MyAdapter 中,我将 OnClickListeners 放在按钮上,
在 onClick() 中,我只调用 _callback.buttonClicked(passing your params)。
希望这个答案有用:)
更新。
好的,我会在不使用界面的情况下提供答案。
让您的 Activity 像这样实现 OnClickListener:
public class MainActivity implements View.OnClickListener{
@Override
public void onClick(View v) {
//do your actions here
}
}
那么,这里是你的Adapter的部分实现:
public class MyAdapter extends ArrayAdapter<String> {
private MainActivity _mainActivity;
public MyAdapter(Context context, int resource, MainActivity mainActivity) {
super(context, resource);
_mainActivity = mainActivity;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Button button;
button.setOnClickListener(_mainActivity);
return super.getView(position, convertView, parent);
}
}
在这种情况下,当您按下按钮时 - MainActivity 中的 onClick 将被调用。
另一种选择。
让你的Activity 像这样:
public class MainActivity {
public void onButtonInAdapterClick(your params) {
//do your actions here
}
}
还有一个Adapter:
public class MyAdapter extends ArrayAdapter<String> {
private MainActivity _mainActivity;
public MyAdapter(Context context, int resource, MainActivity mainActivity) {
super(context, resource);
_mainActivity = mainActivity;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Button button;
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
_mainActivity.onButtonInAdapterClick(your params);
}
});
return super.getView(position, convertView, parent);
}
}
选择您需要的选项)