BaseAdapter Android中的委托事件

BaseAdapter Android中的委托事件,android,baseadapter,Android,Baseadapter,当我们使用BaseAdapter时,有必要创建另一个调用该类(MyBaseAdapter)的类(ClassA)。如果BaseAdapter中要充气的视图上包含按钮和另一个调度事件的控件,如何将这些事件委托给ClassA 我正在使用按钮,但将来我将添加EditText和其他控件,但我不想在BaseAdapter类中管理这些事件。很难理解您的问题,但我会尝试回答您的问题 不,您不必处理扩展BaseAdapter的类中的事件。您始终可以对保存适配器的片段或活动进行回调 因此,在适配器中: privat

当我们使用BaseAdapter时,有必要创建另一个调用该类(MyBaseAdapter)的类(ClassA)。如果BaseAdapter中要充气的视图上包含按钮和另一个调度事件的控件,如何将这些事件委托给ClassA


我正在使用按钮,但将来我将添加EditText和其他控件,但我不想在BaseAdapter类中管理这些事件。

很难理解您的问题,但我会尝试回答您的问题

不,您不必处理扩展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);
//然后在ButtonSelectedListener上填写您的方法,以处理您想要执行的任何操作

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的内部类,该类具有一些可以从适配器激活的方法。

只会使活动实现您的侦听器,并在适配器注册中作为您的类的侦听器

ActivityA implements OnClickListener {

}


YourAdapter extends BaseAdapter {

 YourAdapter(Context ctx,....)

 // Context is your activity
}


为BaseAdapter充气的XML包含2个按钮(请参阅,我想在实例BaseAdapter的类中管理OnClickListener,而在扩展BaseAdapter的类中则不需要。明白我的意思吗?我需要更多的代码和示例,因为我不明白你在说什么。很抱歉,我确实想帮你!很简单,查看其他响应。声明方法“public void onClick(View v){”在同一个类(扩展BaseAdapter的MyAdapter)中,但我想在另一个类中创建相同的方法,该类的哪个实例是MyAdapter。您现在明白我的意思了吗?您在同一个类中管理click事件,我想在该实例MyAdapter的类中管理这些事件,明白吗?
 button.setOnClickListener((ActivityA) ctx);