BottomNavigationView включить клик отключить проверку - PullRequest
0 голосов
/ 27 августа 2018

Я использую BottomNavigationView с 5 элементами, 4 фрагментами и 1 действием, как на изображении ниже

image

Когда щелкают по любому фрагменту, яхочу, чтобы он работал нормально, получая clicked и checked, но когда нажимается элемент "+", я открываю операцию, но не хочу, чтобы она была checked, поэтому я хочу, чтобы она была clickable так что он может открыть действие, но я не хочу быть checked, потому что, когда пользователь вернется из действия, он увидит его выбранным, даже если это неправильно выбранный элемент.Как я могу это сделать?

Вот мой код:

bottomNavigationView = findViewById(R.id.bottom_nav_view);
bottomNavigationView.setOnNavigationItemSelectedListener(this);

.

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
    int id = menuItem.getItemId();
    Fragment fragment = null;
    switch (id) {
        case R.id.home_nav_menu:
            fragment = new HomeFragment();
            break;
        case R.id.inbox_nav_menu:
            fragment = new InboxFragment();
            break;
        case R.id.add_nav_menu:
            Intent intent = new Intent(this, AddActivity.class);
            startActivity(intent);
            return true;
        case R.id.history_nav_menu:
            fragment = new HistoryFragment();
            break;
        case R.id.profile_nav_menu:
            fragment = new ProfileFragment();
            break;
    }
    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_place_holder, fragment).commit();
    return true;
}

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Пользователь MenuItem#setCheckable(boolean) API для игры с проверяемым состоянием пункта меню.


    MenuItem menuItem = navigation.getMenu().getItem(1);
    menuItem.setCheckable(false);

enter image description here

0 голосов
/ 27 августа 2018

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

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
int id = menuItem.getItemId();
Fragment fragment = null;
switch (id) {
    case R.id.home_nav_menu:
        fragment = new HomeFragment();
        break;
    case R.id.inbox_nav_menu:
        fragment = new InboxFragment();
        break;
    case R.id.add_nav_menu:
  menuItem.setCheckable(false);
        Intent intent = new Intent(this, AddActivity.class);
        startActivity(intent);
        return true;
    case R.id.history_nav_menu:
        fragment = new HistoryFragment();
        break;
    case R.id.profile_nav_menu:
        fragment = new ProfileFragment();
        break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_place_holder, fragment).commit();
return true;
}
0 голосов
/ 27 августа 2018

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

 /**
     * Listener for handling selection events on bottom navigation items.
     */
    public interface OnNavigationItemSelectedListener {

        /**
         * Called when an item in the bottom navigation menu is selected.
         *
         * @param item The selected item
         *
         * @return true to display the item as the selected item and false if the item should not
         *         be selected. Consider setting non-selectable items as disabled preemptively to
         *         make them appear non-interactive.
         */
        boolean onNavigationItemSelected(@NonNull MenuItem item);
    }

Таким образом, вы просто возвращаете false в вашем case R.id.add_nav_menu:, и оно будет работать.

...