У меня есть два фрагмента A & B, настроенных с помощью компонента навигации Android. Фрагмент A содержит представление recycler, в котором при щелчке элемента будет переход к фрагменту B.
Проблема заключается в том, что, когда я нажимаю кнопку вверх / назад внутри фрагмента B, он не возвращается к фрагменту A, а перезагружает фрагмент Aи B. Я до сих пор вижу фрагмент B.
Во фрагменте A у меня также есть кнопка плавающего действия, которая перемещается к Fagment B, и она отлично работает.
Я также использую ViewModel + DataBinding для RecyclerView.
Вот как я реализовал навигацию: Макет для элемента Recyclerview
<layout>
<data>
<import type="android.view.View"/>
<variable
name="position"
type="java.lang.Integer" />
<variable
name="viewModel"
type="SmsListViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
...
android:onClick="@{() -> viewModel.onItemClick(position)}">
</androidx.constraintlayout.widget.ConstraintLayout>
<layout>
ViewModel:
private var clicked = MutableLiveData<Long>()
fun getClicked(): MutableLiveData<Long> {
return clicked
}
fun onItemClick(index: Int) {
val threadId = smsList.value!!.get(index).threadId
clicked.value = threadId
}
Фрагмент A
smsListViewModel.getClicked().observe(this, Observer<Long> { clicked ->
if (clicked != null) {
val action = SmsListFragmentDirections.actionListSmsToConservation(clicked)
findNavController().navigate(action)
}
})
И код для кнопки во Фрагменте A, которая работает: Когда я перехожу к Фрагменту B и нажимаю кнопку вверх / назад, я возвращаюсь к Фрагменту A.
floating_action_button.setOnClickListener { view ->
view.findNavController().navigate(R.id.nav_conservation)
}
Где проблема? Я стараюсь без класса Directions, но не помогло.