未调用ActionMode OnCreateActionMode

时间:2016-06-06 21:52:09

标签: android

我正在开发一个带有上下文操作栏的Android应用程序但是没有调用onCreateActionMode,也没有选择listview项目,也没有选择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这样的方法被调用所以我的标题栏没有设置,虽然操作栏确实变黑了,出于某种原因,我知道文本应该是白色的,就好像我{{{ 1}}在我创建它工作的对象之后,它只是回调函数不起作用。

如上所述,另一个问题是,列表视图项目在我actionMode.setTitle("Hello") {I} {I}} {I}}时,我没有显示其已被选中。

1 个答案:

答案 0 :(得分:0)

我已经设法弄清楚问题是什么。

我误解了多选模式监听器的工作原理。我正在做的是在Listener中注册OnItemLongClickListener,将其设置为多选,然后在那里创建ActionMode.Callback,然后创建MultiChoice侦听器。我没有意识到MulitiChoiceListener实际上可以创建ActionMode.Callback本身,因此它们彼此冲突。

相反,我摆脱了所有这些,只需创建一个MultiChoiceModeListener来创建上下文操作栏本身。

相关问题