我已经手动/以编程方式在我的工具栏中为片段页面设置了一个向上按钮,片段中包含以下代码onCreateOptionsMenu
:
(activity as AppCompatActivity).setSupportActionBar?.setDisplayHomeAsUpEnabled(true)
点击系统后退按钮将使用户回到上一个片段,但没有向上按钮(有效)我认为有些用户可能会迷路。
我很难弄清楚如何捕捉和处理向上按钮以将片段从后堆栈中弹出。
这篇SO 帖子显示了如何捕捉向上按钮单击,但它是在 Java 中,并且没有继续解释您将如何向上导航。
我认为它需要看起来像下面的代码,但到处都有错误:
该案例
android.R.id.home
显示“不兼容的类型:Int 和 MenuItem”错误?onBackPressed()
显示“未解决的参考”错误。
错误代码:
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item) {
android.R.id.home -> {
onBackPressed()
return true
}
else -> return super.onOptionsItemSelected(item)
}
}
更新:
对另一个SO 帖子的评论在 Kotlin 中有一个潜在的解决方案。它捕获了对向上按钮的单击并返回到上一个片段页面,但是向上按钮并没有消失。因此,即使在我的应用程序中的顶级片段目标(与 中的每个选项卡对应的页面BottomNavigationView
)上,向上按钮现在仍然存在。
我认为这可能与我的应用程序中只有一个活动以及如上所述我在片段中设置向上按钮的方式有关?如果是这样,是否有解决方法或其他方法通过引用片段而不是整个活动来设置向上按钮?
如果有帮助,这是适配器.kt 文件中 RecyclerView 内部 ViewHolder 类中的代码,它导航到有问题的片段页面:
class AdapterListItemDetails(val items: List<ItemsList>) : RecyclerView.Adapter<AdapterListItemDeatils.ItemsViewHolder>() {
//overrides for OnCreateViewHolder, getItemCount, onBindViewHolder
inner class ItemsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var currentItem: ItemsList? = null
var currentPosition: Int = 0
init {
itemView.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.goto_details, null))
}
fun setData(itemsList: ItemsList, position: Int) {
itemView.tview_Keys.text = itemsList!!.nameText
this.currentItem = itemsList
this.currentPosition = position
}
}
}