#android #kotlin #android-recyclerview #bottomnavigationview
#Android #kotlin #android-recyclerview #bottomnavigationview
Вопрос:
У меня есть приложение BottomNavigationView
, в котором есть 2 пункта меню. У обоих есть свои Fragments
. В первом пункте у Fragment
меня есть RecyclerView
. Я хочу открыть второй пункт меню при нажатии на RecyclerView
строку, а также отправить некоторые параметры. Как и где я должен это сделать?
Что я делаю сейчас: в том Fragment
, что я показываю в первом пункте меню, у меня есть метод, к которому я перехожу RecyclerViewAdapter
, чтобы его можно было запускать при каждом нажатии на строку. Но я не могу найти какой-либо метод в моем listener as BottomNavActivity
, чтобы открыть его второй пункт меню
Ответ №1:
Вам нужна ссылка на вашу активность в адаптере. Вы можете передать это во время инициализации с помощью
SomeAdapter(var activity: Activity)
Затем внутри вашего адаптера вы устанавливаете OnClickListener со следующим действием
activity?.navigation?.selectedItemId = R.id.navigation_id_here
Комментарии:
1. Круто, это работает, но я не собираюсь переходить
Activity
кAdapter
. ЭтоselectedItemId = R.id.navigation_id_here
было действительно полезно, спасибо!2. Никаких проблем, это действие поможет вам избежать необязательных просмотров. Вы также можете использовать тот же шаблон для передачи данных в свой адаптер 🙂
Ответ №2:
Из API 25.3.0 был введен метод setSelectedItemId(int id)
, который позволяет пометить элемент как выбранный, как если бы он был выбран.
Из документов:
Установите идентификатор выбранного пункта меню. Это ведет себя так же, как нажатие на элемент.
Пример кода:
BottomNavigationView bottomNavigationView;
bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavigationView);
bottomNavigationView.setSelectedItemId(R.id.my_menu_item_id);
Для тех, кто все еще использует SupportLibrary <25.3.0
View view = bottomNavigationView.findViewById(R.id.menu_action_item);
view.performClick();
Комментарии:
1. Спасибо, работает отлично. Моя проблема заключалась в том, что я не различал
BottomNavActivity
amp;BottomNavigationView
. Просто попытался получить доступsetSelectedItemId()
к первому, а не ко второму. Еще раз спасибо!2. Но как насчет передачи некоторых данных? Есть ли правильный способ сделать это? На данный момент я вижу только один подход — создание синглтона, чтобы он был доступен с обеих вкладок. Но, может быть, есть лучший способ? Я был бы признателен за совет, заранее спасибо!
3. Это не обрабатывает опции и может привести к сбою. Учитывая, что ответ находится на Java, он должен быть заключен в оператор if, который проверяет != null