Добавить нижнюю панель навигации в классе фрагмента

Я хочу добавить навигационную панель фрагментов в классе фрагментов. Когда я устанавливаю слушателя 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);
        }
Другие вопросы по тегам