Нижняя навигация не работает. Как решить эту проблему? - PullRequest
0 голосов
/ 16 июня 2020

Я сделал код, чтобы он загружал фрагмент при нажатии элементов в нижней навигации, но когда я нажимаю на него, они не работают. Я много раз пытался выяснить, в чем проблема, хотя Android Studio не могла ее найти, но приложение не работает. Не знаю, в чем проблема.

Мое основное действие -

public class MainActivity extends AppCompatActivity {
    BottomNavigationView btm_view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = manager.beginTransaction();
        fragmentTransaction.add(R.id.container, new Chats());
        fragmentTransaction.commit();

        btm_view = findViewById(R.id.bottom_view);
        btm_view.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                if (item.getItemId() == R.id.camera) {
                    FragmentManager manager = getSupportFragmentManager();
                    FragmentTransaction fragmentTransaction = manager.beginTransaction();
                    fragmentTransaction.add(R.id.container, new Camera());
                    fragmentTransaction.commit();
                } else if (item.getItemId() == R.id.chats) {
                    FragmentManager manager = getSupportFragmentManager();
                    FragmentTransaction fragmentTransaction = manager.beginTransaction();
                    fragmentTransaction.add(R.id.container, new Chats());
                    fragmentTransaction.commit();
                } else if (item.getItemId() == R.id.status) {
                    FragmentManager manager = getSupportFragmentManager();
                    FragmentTransaction fragmentTransaction = manager.beginTransaction();
                    fragmentTransaction.add(R.id.container, new Status());
                    fragmentTransaction.commit();
                } else if (item.getItemId() == R.id.calls) {
                    FragmentManager manager = getSupportFragmentManager();
                    FragmentTransaction fragmentTransaction = manager.beginTransaction();
                    fragmentTransaction.add(R.id.container, new Calls());
                    fragmentTransaction.commit();
                } else if (item.getItemId() == R.id.settings) {
                    FragmentManager manager = getSupportFragmentManager();
                    FragmentTransaction fragmentTransaction = manager.beginTransaction();
                    fragmentTransaction.add(R.id.container, new Settings());
                    fragmentTransaction.commit();
                }

                return false;
            }
        });
    }
}

один из моих фрагментов -

public class Chats extends Fragment {

    public Chats() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_chats, container, false);
    }
}

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

Попробуйте так

BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener =
  new BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) {
      switch (item.getItemId()) {
        case R.id.chats:
          openFragment(Chat.newInstance());
          return true;
        case R.id.camera:
          openFragment(Camera.newInstance());
          return true;
        case R.id.status:
          openFragment(Status.newInstance("", ""));
          return true;
      }
      return false;
    }
  };
0 голосов
/ 16 июня 2020
  • При первом использовании replace(R.id.container, fragment) вместо add.
  • Код оптимизации

Использовать setOnNavigationItemSelectedListener. Попробуйте этот способ

Установите слушателя, который будет получать уведомления, когда выбран нижний элемент навигации.

btm_view.setOnNavigationItemSelectedListener(navigationItemSelectedListener);
        openFragment(Camera.newInstance());
      }

      public void openFragment(Fragment fragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.container, fragment);
        transaction.addToBackStack(null);
        transaction.commit();
      }
      BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener =
          new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) {
              switch (item.getItemId()) {
                case R.id.camera:
                  openFragment(Camera.newInstance());
                  return true;
                case R.id.chats:
                  openFragment(Chats.newInstance());
                  return true;
                case R.id.status:
                  openFragment(Status.newInstance());
                  return true;
                case R.id.calls:
                  openFragment(Calls.newInstance());
                  return true;
                case R.id.settings:
                  openFragment(Settings.newInstance());
                  return true;
              }
              return false;
            }
          };
    }

Ваш фрагмент чата будет

public class Chats extends Fragment {

    public Chats() {
        // Required empty public constructor
    }

    public static Chats newInstance() {
    Chats fragment = new Chats();
    return fragment;
   }



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_chats, container, false);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...