對於我的意見 - 是的,你說得對,事件處理程序應該在Activity
/Fragment
,包含ListView
,而不是Adapter
。
也許我在這種情況下的做法是不理想的,但在這裏它是:
我使適配器的接口(或外面,不管),例如
public interface MyAdapterCallback {
void buttonClicked(int buttonId, int position, int param2);
}
當然,你可以通過儘可能多的參數,如你所願。
在Adapter
構造函數我傳遞對象的實例,實現此接口(Activity
本身)。
然後,我的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會叫做。
還有一個選項。
讓您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);
}
}
選擇您需要的選項)
夥計,做我的回答可以幫助您? –