【发布时间】:2018-06-30 13:46:13
【问题描述】:
我已经手动/以编程方式在我的工具栏中为片段页面设置了一个向上按钮,片段中的onCreateOptionsMenu 中包含以下代码:
(activity as AppCompatActivity).setSupportActionBar?.setDisplayHomeAsUpEnabled(true)
点击系统后退按钮将使用户回到上一个片段,但没有向上按钮(有效)我认为有些用户可能会迷路。
我很难弄清楚如何捕捉和处理向上按钮以将片段从后堆栈弹出。
这个SO post 展示了如何捕捉向上按钮的点击,但它是在 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 post 的评论在 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
}
}
}
【问题讨论】:
标签: android-fragments kotlin navigation android-toolbar up-button