0

我有使用 customadpater 填充列表视图的活动。适配器膨胀一个包含(按钮、文本视图、搜索栏...)的布局

我希望按钮单击侦听器,更新 textview 和 seekbar thumb 在活动中处理,而不是在适配器的 getView() 方法中。

我的活动和适配器是不同的类。我需要一个合适的设计在这里请任何帮助。

4

2 回答 2

1

实现这一点的最佳设计是执行@Autocrab 的建议,执行此操作的代码如下所示:

public class ParentClass implements View.onClickListener {

    public void onCreate(Bundle savedInstanceState) {
        MyAdapter mAdapter = new MyAdapter(this, list);
        // MORE AND MORE AND MORE
    }

public class MyAdapter {

    onClickListener mListener;

    public MyAdapter (ParentClass activity, List<?> list) {
        mListener = (onClickListener)activity;
        // MORE AND MORE
    }

    public View getView(...) {
        lButton.setOnClickListener(mListener);
    }
}

像这样的代码的唯一问题是在所有海岸都应该避免的循环引用。

为此,您可能应该使用Wea​​kRefrences

使用 a 时WeakReference,每次在获取它之前检查它是否为空非常重要,如下所示:

public class MyAdapter {

    WeakReference<OnClickListener> mListener;

    public MyAdapter (ParentClass activity, List<?> list) {
        mListener = new WeakReference<OnClickListener>(onClickListener)activity;
        // MORE AND MORE
    }

    public View getView(...) {
        lButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mListener.get() != null) {
                    mListener.get().preformClick(v);
                }
            }
        });
    }
}
于 2013-09-20T11:13:54.270 回答
0

在你的活动中实现按钮(onclick)、seekbar(onprogress)的接口。然后将这些接口传递给适配器的构造函数。在方法中将getView()这些侦听器分配给视图。

于 2013-09-20T11:02:57.607 回答