【问题标题】:ActionMode menu icon is not shownActionMode 菜单图标未显示
【发布时间】:2019-09-07 13:21:37
【问题描述】:

我正在尝试在 recyclerview 中长按某个项目时设置上下文操作栏。但未显示菜单图标。

代码如下。

listAdapter.setOnItemClickListener(object : OnItemClickListener {

            override fun onItemClick(position: Int) {
               ...
            }

            override fun onItemLongClick(position: Int): Boolean {

                if (actionMode != null) {
                    return false
                }

                val activity = activity as AppCompatActivity
                actionMode = activity.startSupportActionMode(actionModeCallback)


                return true
            }

        })

动作模式回调

internal val actionModeCallback = object : ActionMode.Callback {

    override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
        when (item?.itemId) {
            R.id.item_delete -> {
                actionMode?.finish()
                return true
            }
        }
        return false
    }

    override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
        actionMode?.menuInflater?.inflate(R.menu.menu_context, menu)
        actionMode?.title = "delete"

        return true
    }

    override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {

        return false
    }

    override fun onDestroyActionMode(mode: ActionMode?) {
        actionMode = null
    }
}

menu_context.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/item_delete"
        android:title="@string/menu_option_text_delete"
        android:icon="@drawable/ic_delete_white_24dp"
        app:showAsAction="always"
        />
</menu>

我尝试了什么?

没用,连动作模式标题都没有显示。

我使用的是androidx,appCompat版本:1.1.0-rc01

请帮忙!

【问题讨论】:

    标签: android androidx android-actionmode


    【解决方案1】:

    解决方案是在 onPrepareActionMode 中手动更新菜单

    @Override
      public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
      menu.findItem(R.id.menu_archive).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
      menu.findItem(R.id.menu_delete).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
      menu.findItem(R.id.menu_upload_to_cloud).setShowAsAction
      (MenuItem.SHOW_AS_ACTION_ALWAYS);
       return true;
     }
    

    【讨论】:

    • 正如我在问题中提到的,我已经尝试过了,但不起作用
    【解决方案2】:

    实际上这是我在issue tracker中指出的错误

    override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
         /*-->*/mode?.menuInflater?.inflate(R.menu.menu_context, menu)
         return true
    }
    

    注意你应该使用传入的模式而不是你自己的 ActionMode 对象以获取正确的充气机。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      相关资源
      最近更新 更多