当我们使用 BaseAdapter 时,有必要创建另一个类(ClassA)来调用这个类(MyBaseAdapter)。如果在 BaseAdapter 中膨胀的视图包含按钮和另一个调度事件的控件,如何将这些事件委托给 ClassA?
我正在使用按钮,但将来我将添加 EditText 和另一个控件,但我不想在 BaseAdapter 类中管理这些事件。
当我们使用 BaseAdapter 时,有必要创建另一个类(ClassA)来调用这个类(MyBaseAdapter)。如果在 BaseAdapter 中膨胀的视图包含按钮和另一个调度事件的控件,如何将这些事件委托给 ClassA?
我正在使用按钮,但将来我将添加 EditText 和另一个控件,但我不想在 BaseAdapter 类中管理这些事件。
只是使 Activity 实现了您的侦听器并在适配器中注册为您的类的侦听器。
ActivityA implements OnClickListener {
}
YourAdapter extends BaseAdapter {
YourAdapter(Context ctx,....)
// Context is your activity
}
button.setOnClickListener((ActivityA) ctx);
很难理解你的问题,但我会尽量回答我认为你在问的问题。
不,您不必处理类中扩展 BaseAdapter 的事件。您始终可以对包含适配器的 Fragment 或 Activity 进行回调。
所以在适配器中:
private OnButtonSelectedListener mListener;
public interface OnButtonSelectedListener {
void onButtonSelected();
}
public void setListener (OnButtonSelectedListener listener) {
mListener = listener;
}
// 然后当按钮被点击时调用:
mListener.onButtonSelected();
// 在你的 Activity 或 Fragment 中,
// 确保类实现了 OnButtonSelectedListener // 然后添加未实现的方法
// 无论你在哪里实例化你的适配器,设置监听器
coolAdapter = new CoolAdapter(mContext, listOfCoolStuff);
coolAdapter.setListener(this);
// 然后填写你的方法 onButtonSelectedListener 来处理你想做的任何事情
private void onButtonSelected() {
//handle your event here!
}
如果您有任何问题,或者我只是没有正确理解您的问题,请告诉我。祝你好运!
使用适配器作为监听器:
public class MyAdapter extends BaseAdapter implements OnClickListener{
@Override
public int getCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// if you are in fragment
View v = getActivity().getLayoutInflater().inflate(R.layout.layout_settings_cell, null);
Button btn = v.findViewById(R.id.button1);
btn.setOnClickListener(this);
btn.setTag(Integer.valueOf(position));
return v;
}
@Override
public void onClick(View v) {
int pos = (Integer) v.getTag();
// your code
}
}
只需扩展您的自定义列表项布局。
所有按钮都将具有相同的 id,但您可以将位置参数放在标签中以了解按下的确切按钮。
使这个适配器成为您的 A 类的内部类,它具有一些可以从适配器激活的方法。