0

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

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

4

3 回答 3

0

只是使 Activity 实现了您的侦听器并在适配器中注册为您的类的侦听器。

ActivityA implements OnClickListener {

}


YourAdapter extends BaseAdapter {

 YourAdapter(Context ctx,....)

 // Context is your activity

}

 button.setOnClickListener((ActivityA) ctx);
于 2013-04-25T20:14:25.670 回答
0

很难理解你的问题,但我会尽量回答我认为你在问的问题。

不,您不必处理类中扩展 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!

}

如果您有任何问题,或者我只是没有正确理解您的问题,请告诉我。祝你好运!

于 2013-04-25T19:39:46.727 回答
0

使用适配器作为监听器:

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

于 2013-04-25T19:43:38.830 回答