Mic*_*ael 98 android bottomnavigationview
我正在使用android.support.design.widget.BottomNavigationView支持库中的新功能.如何从代码中设置当前选择?我意识到,旋转屏幕后,选择会更改回第一项.当然,它也将有所帮助,如果有人能告诉我,如何"拯救"的当前状态BottomNavigationView的onPause功能,以及如何将其在恢复onResume.
谢谢!
Ric*_*rdo 140
从API 25.3.0开始,我们引入了一种方法setSelectedItemId(int id),让您将项目标记为已选中,就像它被点击一样.
来自docs:
设置所选的菜单项ID.这与点击项目的行为相同.
代码示例:
BottomNavigationView bottomNavigationView;
bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavigationView);
bottomNavigationView.setOnNavigationItemSelectedListener(myNavigationItemListener);
bottomNavigationView.setSelectedItemId(R.id.my_menu_item_id);
Run Code Online (Sandbox Code Playgroud)
重要
您必须已经将所有项目添加到菜单并在调用setSelectedItemId之前设置监听器,以便BottomNavigationView可以运行相应代码的行为.如果在添加菜单项之前调用setSelectedItemId并设置监听器,则不会发生任何事情.
kar*_*nms 47
要以编程方式单击您需要使用的BottomNavigationBar项:
View view = bottomNavigationView.findViewById(R.id.menu_action_item);
view.performClick();
Run Code Online (Sandbox Code Playgroud)
这将正确排列所有项目及其标签.
Via*_*lav 45
对于那些仍然使用SupportLibrary <25.3.0的人
我不确定这是否是这个问题的完整答案,但我的问题非常相似 - 我必须back按下按钮并将用户带到他之前的标签.所以,也许我的解决方案对某些人有用:
private void updateNavigationBarState(int actionId){
Menu menu = bottomNavigationView.getMenu();
for (int i = 0, size = menu.size(); i < size; i++) {
MenuItem item = menu.getItem(i);
item.setChecked(item.getItemId() == actionId);
}
}
Run Code Online (Sandbox Code Playgroud)
请记住,如果用户按其他导航选项卡BottomNavigationView不会清除当前选定的项目,那么您需要onNavigationItemSelected在处理导航操作后调用此方法:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.some_id_1:
// process action
break;
case R.id.some_id_2:
// process action
break;
...
default:
return false;
}
updateNavigationBarState(item.getItemId());
return true;
}
Run Code Online (Sandbox Code Playgroud)
关于保存实例状态,我认为您可以使用相同action id的导航视图并找到合适的解决方案.
Ash*_*ini 13
bottomNavigationView.setSelectedItemId(R.id.action_item1);
Run Code Online (Sandbox Code Playgroud)
action_item1菜单项ID 在哪里。
小智 12
使用它来按菜单 id 设置选定的底部导航菜单项
MenuItem item = mBottomNavView.getMenu().findItem(menu_id);
item.setChecked(true);
Run Code Online (Sandbox Code Playgroud)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bottomNavigationView.setOnNavigationItemSelectedListener(this);
Menu menu = bottomNavigationView.getMenu();
this.onNavigationItemSelected(menu.findItem(R.id.action_favorites));
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试执行Click方法:
View view = bottomNavigationView.findViewById(R.id.YOUR_ACTION);
view.performClick();
Run Code Online (Sandbox Code Playgroud)
编辑
从 API 25.3.0 开始,引入了一种方法setSelectedItemId(int id),可以让您将项目标记为选中,就好像它被点击一样。
小智 6
添加android:enabled="true"到底部导航菜单项。
然后bottomNavigationView.setOnNavigationItemSelectedListener(mListener)通过执行将其设置为选中状态bottomNavigationView.selectedItemId = R.id.your_menu_id
小智 6
navigationView.getMenu().findItem(R.id.navigation_id).setChecked(true);
Run Code Online (Sandbox Code Playgroud)
小智 5
在 API 25 之上,您可以使用 setSelectedItemId(menu_item_id) 但在 API 25 之下,您必须采取不同的做法,用户 Menu 获取句柄,然后 setChecked 到已检查的特定项目
用
bottomNavigationView.getMenu().getItem(POSITION).setChecked(true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83083 次 |
| 最近记录: |