我有一个 ListFragment(出于兼容性原因,我使用 android.support.v4.app.ListFragment)并且想要使用上下文操作模式。
因此我编码:
public class CustomListFragment extends ListFragment {
...
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setListAdapter(new CustomListAdapter(getActivity().getApplicationContext(), TYPE));
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB){
registerForContextMenu(getListView());
} else {
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
getListView().setMultiChoiceModeListener(new CustomMultiSpamItemChoiceModeListener());
}
}
...
}
class CustomMultiSpamItemChoiceModeListener implements MultiChoiceModeListener{
@Override
public boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) {
return false;
}
@Override
public boolean onCreateActionMode(ActionMode arg0, Menu arg1) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode arg0) {
}
@Override
public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {
return false;
}
@Override
public void onItemCheckedStateChanged(ActionMode arg0, int arg1,
long arg2, boolean arg3) {
}
}
public class CustomListAdapter extends BaseAdapter{
...
@Override
public View getView(int pos, View view, ViewGroup vg) {
...
}
}
问题是,只要我将 设置setChoiceMode
为ListView.CHOICE_MODE_MULTIPLE_MODAL
适配器方法getView(int pos, View view, ViewGroup vg)
,就会在每次单击(短按单击)的项目上调用ListView
. 上下文动作模式甚至没有被激活。
这会在一个持久的项目按下动画中体现出来。通常,按下的项目的蓝色指示器会持续几毫秒,但在我的情况下,它大约是一秒钟,因为它需要一些时间来收集创建 ListItems 所需的所有信息。
这种行为是否符合预期?我不认为ListView.CHOICE_MODE_MULTIPLE_MODAL
旗帜需要再次“重新启动”整体ListItems
。