Как открыть пункт меню при нажатии на строку RecyclerView

#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