我有一个自定义BaseAdapter
显示ListView
包含 aTextView
和 a CheckBox
。TextView
实现了在OnClickListener
单击文本时执行特定操作。在适配器中,我有一个OnCheckedChangeListener
注册,它跟踪检查了哪个项目(因为ListView
回收)。
我想ActionMode
在我选中 a 时启动CheckBox
它,并在我取消选中它时停止它。
如何通知托管适配器的主要活动已进行检查?
我有一个自定义BaseAdapter
显示ListView
包含 aTextView
和 a CheckBox
。TextView
实现了在OnClickListener
单击文本时执行特定操作。在适配器中,我有一个OnCheckedChangeListener
注册,它跟踪检查了哪个项目(因为ListView
回收)。
我想ActionMode
在我选中 a 时启动CheckBox
它,并在我取消选中它时停止它。
如何通知托管适配器的主要活动已进行检查?
创建一个监听器回调接口,类似于:
public interface ListenerCheckBox
{
public void onRowChecked(int rowNun);
}
然后,让你的主要活动实现这个监听器:
public class ActivityMain implements ListenerCheckBox
然后,当您实例化您的自定义 BaseAdapter 时,传入侦听器:
//kv 3rd parameter would be listener
CustomBaseAdapter customBaseAdapter = new CustomBaseAdapter(this, items, this);
然后,在您的 CustomBaseAdapter 的构造函数中,为侦听器设置一个成员字段:
public CustomBaseAdapter(Context context, ArrayList<Item> items, ListenerCheckBox listenerCheckBox)
{
mListenerCheckBox = listenerCheckBox;
...
}
然后,每次检查项目时,调用:
mListenerCheckBox.onRowChecked(rowNum);
这是一个 Android Studio 项目,它显示了如何执行您所要求的操作的示例。特别是,检查检查侦听器及其onClick()
:
@Override
public void onClick(View v) {
if (mMode != null) {
mMode = mListView.startActionMode(new ExampleMultiChoiceModeListener(mActivity));
}
mListView.setItemChecked(mPosition, ((Checkable) v).isChecked());
}