#android #android-fragments #android-jetpack #android-bottomnav
#Android #android-фрагменты #android-реактивный ранец #android-bottomnav
Вопрос:
Я использую подход с одним действием и несколькими фрагментами и JetPackNavigation с NavGraph. Я добавил BottomNavigationBar для перехода к 2 фрагментам, которые работают должным образом. Теперь я хочу поместить backbuttom в BottomNavigationBar с намерением, чтобы, если кто-то нажмет на нее, она вернулась к самому последнему посещенному фрагменту. Я хочу знать, возможно ли что-то подобное, и нужно ли мне устанавливать соединения в NavGraph от всех фрагментов к другим фрагментам, чтобы он мог перемещаться обратно? Проблема в том, что мой NavGraph довольно большой и содержит много фрагментов.
Здесь вы видите скриншот из NavGraph, где я указал 2 фрагмента для навигации в нижней панели навигации (которые работают довольно хорошо).
Кроме того, здесь вы видите XML-код для нижней панели навигации.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@ id/Back_BottomNavigation"
android:icon = "@drawable/ic_baseline_arrow_left_24"
android:title = "Back" />
<item
android:id="@ id/FR_LanguageSelection"
android:icon = "@drawable/ic_add_circle_full"
android:title = "@string/Language" />
<item
android:id="@ id/Fragment1"
android:icon = "@drawable/ic_add_circle_full"
android:title = "Fragment1" />
</menu>
Знаете ли вы, могу ли я реализовать обратную кнопку таким образом, чтобы она возвращалась к последнему отображаемому фрагменту? Я был бы признателен за каждый комментарий.
Никто не знает, как я могу это сделать? Я довольно часто читал, что навигация по Jetpack хороша для обработки backstack. Верно ли это и как я могу это сделать?
Обновление: я вставил, как указано в одном ответе, прослушиватель для BottomNavigationView в MainActivity (в котором размещаются все фрагменты с использованием NavHostFragment). Теперь обратная навигация работает так, как должна. Однако обычная навигация по Jetpack с использованием других нижних частей нижней панели навигации больше не работает. Когда я нажимаю на другие нижние части, ничего не происходит (до добавления слушателя в основное действие он работал отлично). У вас есть какие-либо идеи, как я могу решить эту проблему? Вот код недавно добавленного прослушивателя в onCreateMethod класса MainActivity:
//These commands were there before
final NavController navController = Navigation.findNavController(this,
R.id.navHostfragment);
NavigationUI.setupWithNavController(binding.bottomNavigation, navController);
//These are the new commands
binding.bottomNavigation.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.Back_BottomNavigation:
navController.navigateUp();
}
return true;
}
});
Есть какие-нибудь идеи о том, как решить эту проблему?
Комментарии:
1. Как насчет findNavController().navigateUp()?
2. Спасибо, мин, за твой ответ. Где я должен написать этот код? У меня нет Java-файла для BottomNavigationBar (я просто создаю его в MainActivity), так как навигация работает автоматически, когда вы указали пункты назначения в BottomNavigationBar
Ответ №1:
установите желаемый параметр поведения в OnNavigationItemSelectedListener от BottomNavigationView
yourBottomNavigationView.setOnNavigationItemReselectedListener(object : OnNavigationItemSelectedListener{
@override fun onNavigationItemSelected (MenuItem item){
when(item){
//insert your condition to match your requirement
}
}
})
Комментарии:
1. Когда я копирую код из вашей предыдущей ссылки в свой основной actvity, я получаю следующую ошибку «Анонимный класс lass, производный от OnNavigationItemSelectedListener’, должен быть либо объявлен абстрактным, либо реализовать абстрактный метод ‘onNavigationItemSelected (MenuItem)’ в ‘OnNavigationItemSelectedListener'»
2. Итак, вопрос в том, где (в каком фрагменте или активности) и как реализовать функциональность кнопки возврата
3. Спасибо ming за ваш ответ. Есть какие-либо комментарии к моему последнему комментарию? Я был бы очень признателен за каждый ваш дальнейший комментарий.
4. @VanessaF реализует прослушиватель, к которому вы привязываете свой BottomNavigationView, в основном в вашей деятельности.
5. Спасибо мин Чену за ваш ответ. Я реализовал то, что вы предложили, и теперь задняя кнопка работает. ОДНАКО: другие нижние части в BottomNavigationView больше не работают. Как было сказано ранее, я использую навигационные компоненты Jetpack, и при их использовании нижняя панель навигации перемещается «автоматически», просто указывая правильные имена в файлах меню. Однако при использовании вашего подхода у меня возникает ощущение, что эта «автоматическая» навигация устраняется. Итак, мой вопрос в том, как их объединить?