gpt4 book ai didi

android - 在 ActionMode 之上显示 ActionMode

转载 作者:行者123 更新时间:2023-11-29 01:00:51 25 4
gpt4 key购买 nike

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

问题是当 Action 模式A显示并且操作模式 B 显示在其顶部,AB 时自动关闭显示。用户无法从 B 导航回来至 A .

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

那么有没有办法在另一个 Action 模式之上打开一个 Action 模式,或者至少以编程方式替换 Action 模式的菜单布局,然后再将其改回?

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

最佳答案

我想我通过 Action 模式 B 的 onDestroyActionMode 中的 postDelayed() 达到了期望的行为。这不是一个非常优雅的解决方案,但它确实有效。

我的代码 fragment :

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)
}

关于android - 在 ActionMode 之上显示 ActionMode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51235380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com