Я вручную / программно настроил кнопку вверх на панели инструментов для фрагмента страницы со следующим кодом в onCreateOptionsMenu
во фрагменте:
(activity as AppCompatActivity).setSupportActionBar?.setDisplayHomeAsUpEnabled(true)
Нажатие на кнопку возврата системы вернет пользователя к предыдущему фрагменту, но без кнопки «вверх» (это работает). Я думаю, что некоторые пользователи могут потеряться.
У меня возникают трудности при попытке понять, как поймать и обработать кнопку вверх, чтобы вытащить фрагмент из заднего стека.
В этом SO сообщении показано, как поймать нажатие кнопки "вверх", как это происходит на Java, и не объясняется, как вы будете перемещаться вверх.
Я думаю, это должно выглядеть примерно так, как показано ниже, но везде есть ошибки:
Неверный код:
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item) {
android.R.id.home -> {
onBackPressed()
return true
}
else -> return super.onOptionsItemSelected(item)
}
}
UPDATE:
Комментарий к другой ТАКОЙ записи имеет потенциальное решение в Котлине. Он ловит щелчок на кнопке вверх и возвращается на предыдущую страницу фрагмента, но затем кнопка вверх не исчезает. Таким образом, кнопка «вверх» теперь сохраняется даже в местах назначения фрагментов верхнего уровня в моем приложении (страницы, соответствующие каждой вкладке в BottomNavigationView
).
Думаю, это может быть связано с тем, что в моем приложении есть только одно действие, и с тем, как я установил кнопку вверх во фрагменте, как упомянуто выше? Если да, есть ли обходной путь или другой способ настроить кнопку вверх, ссылаясь на фрагмент вместо всего действия?
Если это поможет, то это код внутреннего класса ViewHolder RecyclerView в файле adapter.kt, который переходит к рассматриваемой странице фрагмента:
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
}
}
}