BottomNavigationView 启用点击禁用勾选
BottomNavigationView enable click disable check
我使用的 BottomNavigationView 有 5 个项目、4 个片段和 1 个 Activity,如下图所示
单击任何片段时,我希望它正常运行,得到 clicked
和 checked
,但是当单击“+”项时,我打开了一个 Activity,但我不希望它是 checked
,所以我希望它是 clickable
这样它可以打开 Activity,但我不想成为 checked
,因为当用户 return 从 activity 返回时将看到它被选中,即使它是错误的选择项。
我该怎么做?
这是我的代码:
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;
}
查看底部导航监听器的源代码,当您不想将项目显示为选中时,只需 return 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);
}
所以你只需 return 在你的 case R.id.add_nav_menu:
中设置 false 就可以了。
用户 MenuItem#setCheckable(boolean)
API 为了玩菜单项的可检查状态。
MenuItem menuItem = navigation.getMenu().getItem(1);
menuItem.setCheckable(false);
这样试试:
@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;
}
我使用的 BottomNavigationView 有 5 个项目、4 个片段和 1 个 Activity,如下图所示
单击任何片段时,我希望它正常运行,得到 clicked
和 checked
,但是当单击“+”项时,我打开了一个 Activity,但我不希望它是 checked
,所以我希望它是 clickable
这样它可以打开 Activity,但我不想成为 checked
,因为当用户 return 从 activity 返回时将看到它被选中,即使它是错误的选择项。
我该怎么做?
这是我的代码:
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;
}
查看底部导航监听器的源代码,当您不想将项目显示为选中时,只需 return 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);
}
所以你只需 return 在你的 case R.id.add_nav_menu:
中设置 false 就可以了。
用户 MenuItem#setCheckable(boolean)
API 为了玩菜单项的可检查状态。
MenuItem menuItem = navigation.getMenu().getItem(1);
menuItem.setCheckable(false);
这样试试:
@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;
}