我有使用 customadpater 填充列表视图的活动。适配器膨胀一个包含(按钮、文本视图、搜索栏...)的布局
我希望按钮单击侦听器,更新 textview 和 seekbar thumb 在活动中处理,而不是在适配器的 getView() 方法中。
我的活动和适配器是不同的类。我需要一个合适的设计在这里请任何帮助。
我有使用 customadpater 填充列表视图的活动。适配器膨胀一个包含(按钮、文本视图、搜索栏...)的布局
我希望按钮单击侦听器,更新 textview 和 seekbar thumb 在活动中处理,而不是在适配器的 getView() 方法中。
我的活动和适配器是不同的类。我需要一个合适的设计在这里请任何帮助。
实现这一点的最佳设计是执行@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);
}
}
像这样的代码的唯一问题是在所有海岸都应该避免的循环引用。
为此,您可能应该使用WeakRefrences。
使用 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);
}
}
});
}
}
在你的活动中实现按钮(onclick)、seekbar(onprogress)的接口。然后将这些接口传递给适配器的构造函数。在方法中将getView()
这些侦听器分配给视图。