当我们使用BaseAdapter时,需要创建另一个调用此类的类(ClassA)(MyBaseAdapter)。如果在BaseAdapter中的膨胀视图中包含按钮和另一个派发事件的控件,如何将这些事件委派给ClassA?在BaseAdapter中委派事件Android
我正在使用按钮,但将来我会添加EditText和另一个控件,但我不想在BaseAdapter类中管理这些事件。
当我们使用BaseAdapter时,需要创建另一个调用此类的类(ClassA)(MyBaseAdapter)。如果在BaseAdapter中的膨胀视图中包含按钮和另一个派发事件的控件,如何将这些事件委派给ClassA?在BaseAdapter中委派事件Android
我正在使用按钮,但将来我会添加EditText和另一个控件,但我不想在BaseAdapter类中管理这些事件。
只是让活动实现了您和您在适配器中注册为监听器的监听器。
ActivityA implements OnClickListener {
}
YourAdapter extends BaseAdapter {
YourAdapter(Context ctx,....)
// Context is your activity
}
button.setOnClickListener((ActivityA) ctx);
这很难理解你的问题,但我会尽力回答你的问题。
不,您不必处理扩展BaseAdapter的类中的事件。您始终可以对保存适配器的片段或活动进行回调。
所以在适配器:
private OnButtonSelectedListener mListener;
public interface OnButtonSelectedListener {
void onButtonSelected();
}
public void setListener (OnButtonSelectedListener listener) {
mListener = listener;
}
//然后单击该按钮时调用:
mListener.onButtonSelected();
//在你的活动或片段,
//确保类实现OnButtonSelectedListener //然后添加未实现的方法
//你在哪里都实例化适配器,设置监听
coolAdapter = new CoolAdapter(mContext, listOfCoolStuff);
coolAdapter.setListener(this);
//然后在您的方法onButtonSelectedListener填写办理什么是你想做的事
private void onButtonSelected() {
//handle your event here!
}
让我知道你是否有任何问题或如果我只是不正确地理解你的问题。祝你好运!
该充气BaseAdapter包含2个按钮的XML(参见[链接](http://imageshack.us/photo/my-images/843/capturadepantalla201304m.png/) ,我想管理实例BaseAdapter的类中的OnClickListener,在BaseAdapter的扩展类中没有。您了解我吗? – sneyder05 2013-04-25 19:52:43
我需要更多的代码和示例,因为我不明白你在说什么。很抱歉,我确实想帮忙! – 2013-04-25 20:10:34
很简单,查看其他回复。它声明方法“public void onClick(View v){”在同一个类中(MyAdapter是BaseAdapter的扩展),但是我想创建相同的方法,但是在另一个类中,哪个实例的类MyAdapter。你明白我了吗? – sneyder05 2013-04-25 20:15:49
使用适配器作为一名听众:
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类适配器内部类具有一些您可以从适配器激活的方法。
你在同一个班级管理点击事件,我想管理实例MyAdapter的班级中的那些事件,你了解我吗? – sneyder05 2013-04-25 19:55:05
我会测试代码 – sneyder05 2013-04-25 20:21:30