Добавить нижнюю панель навигации в классе фрагмента
Я хочу добавить навигационную панель фрагментов в классе фрагментов. Когда я устанавливаю слушателя onclick, происходит ошибка. Как я могу решить это?
public class data extends Fragment{
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
BottomNavigationItemView bottomNavigationItemView=(BottomNavigationItemView)getActivity().findViewById(R.id.bottomMenu);
bottomNavigationItemView.setOnClickListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
return false;
}
});
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.data, container, false);
}
}
1 ответ
Похоже, вы неправильно понимаете реализацию BottomNavigationView
, поэтому я бы посоветовал вам прочитать эту статью, которая объясняет основы BottomNavigationView
Реализация.
Если вы хотите получить ответ для клика в BottomNavigationView, вам нужно реализовать его следующим образом:
BottomNavigationView bottomNavigationView = (BottomNavigationView)
findViewById(R.id.bottom_navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.action_favorites:
case R.id.action_schedules:
case R.id.action_music:
}
return true;
}
});
Как вы можете видеть в приведенном выше примере, слушатель обнаруживает кнопку, которая была нажата, в соответствии с ее идентификатором. Идентификаторы устанавливаются в утраenu resource file
, как это:
<?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/action_favorites"
android:enabled="true"
android:icon="@drawable/ic_favorite_white_24dp"
android:title="@string/text_favorites"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_schedules"
android:enabled="true"
android:icon="@drawable/ic_access_time_white_24dp"
android:title="@string/text_schedules"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_music"
android:enabled="true"
android:icon="@drawable/ic_audiotrack_white_24dp"
android:title="@string/text_music"
app:showAsAction="ifRoom" />
</menu>
Это было только краткое объяснение. Опять же, чтение статьи, которую я упомянул, должно дать вам общее представление о проблеме.
Другая вещь, которую вы должны заметить, это ваша BottomNavigationView
Ресурс макета. Предполагая, что ваш BottomNavigationView
на самом деле в родительском activity
вашей fragment
затем с помощью (BottomNavigationItemView)getActivity().findViewById(R.id.bottomMenu);
правильно, хотя я предлагаю вам написать эту строку activity
Это Java-код, поэтому он будет применяться ко всем вашим фрагментам.
Если твой BottomNavigationView
находится в fragment
Ресурс макета, то вы должны найти его так:
public class data extends Fragment{
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
BottomNavigationItemView bottomNavigationItemView=(BottomNavigationItemView)view.findViewById(R.id.bottomMenu);
}