我正在使用一个带有上下文操作栏的Android应用程序,但是onCreateActionMode没有被调用,列表视图项也没有被选中,并且itemcheckstatechanged侦听器也不工作。
下面是我创建操作模式的方式:
AdapterView.OnItemLongClickListener mOnItemLongClickListener = new AdapterView.OnItemLongClickListener()
{
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
{
if (mActionMode != null)
{
return false;
}
Toast.makeText(getActivity(), "Long Click", Toast.LENGTH_LONG).show();
lstRooms.setOnItemClickListener(null);
mActionMode = getActivity().startActionMode(mActionModeCallback);
view.setSelected(true);
return true;
}
};下面是我如何设置OnLongItemClickListener
lstRooms.setOnItemLongClickListener(mOnItemLongClickListener);下面是我的ActionMode回调。
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback()
{
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu)
{
lstRooms.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
lstRooms.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener()
{
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked)
{
Toast.makeText(getActivity(), "Clicked", Toast.LENGTH_LONG).show();
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu)
{
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.room_context_menu, menu);
mode.setTitle("HELLO WORLD");
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu)
{
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item)
{
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode)
{
}
});
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu)
{
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item)
{
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode)
{
mActionModeCallback = null;
}
};没有一个方法(比如onCreateActionMode )被调用,所以我的标题栏没有设置,尽管操作栏确实变黑了,但出于某种原因,我知道文本应该是白色的,就好像我在创建actionMode.setTitle("Hello")之后,它工作正常,只是回调函数不起作用。
如前所述,另一个问题是列表视图项没有显示它选择了什么,当我执行view.setSelected(true)时,我也尝试过lstRoom.setItemChecked(position, true)。
发布于 2016-06-08 18:22:45
我已经弄清楚问题出在哪里了。
我对多选择模式听者是如何工作的产生了误解。我所做的是注册OnItemLongClickListener,然后在侦听器中,将它设置为多个选择,然后在其中创建ActionMode.Callback,然后创建MultiChoice侦听器。我没有意识到MulitiChoiceListener实际上可以创建ActionMode.Callback本身,因此它们之间存在冲突。
相反,我消除了所有这些,只创建了一个MultiChoiceModeListener,它创建了上下文操作栏本身。
https://stackoverflow.com/questions/37667431
复制相似问题