首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActionMode OnCreateActionMode未调用

ActionMode OnCreateActionMode未调用
EN

Stack Overflow用户
提问于 2016-06-06 21:52:08
回答 1查看 1.5K关注 0票数 0

我正在使用一个带有上下文操作栏的Android应用程序,但是onCreateActionMode没有被调用,列表视图项也没有被选中,并且itemcheckstatechanged侦听器也不工作。

下面是我创建操作模式的方式:

代码语言:javascript
复制
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

代码语言:javascript
复制
lstRooms.setOnItemLongClickListener(mOnItemLongClickListener);

下面是我的ActionMode回调。

代码语言:javascript
复制
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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-08 18:22:45

我已经弄清楚问题出在哪里了。

我对多选择模式听者是如何工作的产生了误解。我所做的是注册OnItemLongClickListener,然后在侦听器中,将它设置为多个选择,然后在其中创建ActionMode.Callback,然后创建MultiChoice侦听器。我没有意识到MulitiChoiceListener实际上可以创建ActionMode.Callback本身,因此它们之间存在冲突。

相反,我消除了所有这些,只创建了一个MultiChoiceModeListener,它创建了上下文操作栏本身。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37667431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档