首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示ActionMode在ActionMode上

显示ActionMode在ActionMode上
EN

Stack Overflow用户
提问于 2018-07-08 19:32:52
回答 1查看 377关注 0票数 2

我有一个列表活动,用户可以在其中执行打开操作模式AB。用户还可以打开操作模式A,然后在其之上打开B

问题是,当显示动作模式A,在上面显示动作模式B时,A会在显示B时自动关闭。用户无法从B导航到A

我想我可以在打开动作模式A时注意到动作模式B的可见性,然后在动作模式B关闭时恢复它,但这是行不通的。在关闭一个动作模式后,似乎不可能立即显示另一个动作模式。但是,只有当操作模式A用后箭头关闭时,才会发生此问题。当代码(ActionMode.finish())关闭时,可以显示动作模式B,但是关闭动画并不会使它看起来像是用户从B导航回A。所以这个解决方案是不可能的。

那么,是否有一种方法可以在另一种模式之上打开操作模式,或者至少以编程方式替换操作模式的菜单布局,然后将其更改回?

操作模式A实际上是搜索操作模式,用户可以从中选择打开操作模式B的结果,如果这有助于理解的话。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-18 15:17:16

我认为我通过动作模式B的postDelayed()实现了期望的行为。这不是非常优雅的解决方案,但它有效。

我的代码片段:

代码语言:javascript
复制
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        listView.onItemClickListener = AdapterView.OnItemClickListener { adapterView, view, p2, p3 ->
            startActionModeA()
            true
        }
    }

    var actionModeA: ActionMode? = null

    val actionModeCallbackA = object : ActionMode.Callback {
        override fun onActionItemClicked(mode: ActionMode?, p1: MenuItem?): Boolean {
            Log.wtf("ACTION MODE", "onActionItemClicked")
            actionModeB = startActionMode(actionModeCallbackB)
            return true
        }

        override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
            Log.wtf("ACTION MODE", "onCreateActionMode")
            val inflater = mode?.getMenuInflater()
            inflater?.inflate(R.menu.context_menu, menu)
            return true
        }

        override fun onPrepareActionMode(p0: ActionMode?, p1: Menu?): Boolean {
            Log.wtf("ACTION MODE", "onPrepareActionMode")
            return false
        }

        override fun onDestroyActionMode(p0: ActionMode?) {
            Log.wtf("ACTION MODE", "onDestroyActionMode")
            actionModeA = null
        }


    }
    var actionModeB: ActionMode? = null

    val actionModeCallbackB = object : ActionMode.Callback {
        override fun onActionItemClicked(mode: ActionMode?, p1: MenuItem?): Boolean {
            Log.wtf("ACTION MODE 2", "onActionItemClicked")
            return true
        }

        override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
            Log.wtf("ACTION MODE 2", "onCreateActionMode")
            val inflater = mode?.getMenuInflater()
            inflater?.inflate(R.menu.context_menu2, menu)
            return true
        }

        override fun onPrepareActionMode(p0: ActionMode?, p1: Menu?): Boolean {
            Log.wtf("ACTION MODE 2", "onPrepareActionMode")
            return false
        }

        override fun onDestroyActionMode(mode: ActionMode?) {
            Log.wtf("ACTION MODE 2", "onDestroyActionMode")
            actionModeB = null
            listView.postDelayed({
                startActionModeA()
            }, 100)
        }
    }

    private fun startActionModeA() {
        actionModeA = startActionMode(actionModeCallbackA)
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51235380

复制
相关文章

相似问题

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