使用ASL的25.0 BottomNavigationView
,我面临一些麻烦,如保存选定项目(或他的索引)和选定项目编程。
不幸的是,在这个阶段BottomNavigationView
中缺少很多特性。
你的问题真的很有趣,我写了这个扩展的BottomNavigationView
来保存状态,在你的情况下,保存最后选择的项目。
下面是代码
的要点这个扩展包括:
- 提供了两个方法来设置和获取所选项目。
- 仅保存和恢复上次选择的状态。
同意Nikola的观点!
我也创造了我自己的主旨
要保存旋转后的状态,您需要添加Activity
:
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("opened_fragment", bottomNavigation.getCurrentItem());
super.onSaveInstanceState(outState);
}
和进入onCreate
方法,就在设置BottomNavigationView
之后:
final defaultPosition = 0;
final int bottomNavigationPosition = savedInstanceState == null ? defaultPosition :
savedInstanceState.getInt("opened_fragment", defaultPosition);
bottomNavigation.setCurrentItem(bottomNavigationPosition);
这个要点的最大优点是:有几种侦听器,它显示你以前的选择位置和侦听器的反应,即使位置是程序化设置的。
我正在与BottomNavigationView一起工作,这里是应用程序在屏幕旋转上正确工作的代码。首先,我创建了一个变量来保存所选菜单的id private int saveState;
通过在
@Override
protected void onResume() {
super.onResume();
navigation.setSelectedItemId(saveState);
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
saveState = navigation.getSelectedItemId();
}
然后在onCreate方法中检索id的值,如果可用
if(savedInstanceState!=null){
navigation.setSelectedItemId(saveState);
}else{
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.content, MapFragment.newInstance());
transaction.commit();
}
我有同样的问题,我所做的是从25.0.1更新到25.3.1,它开始正常工作,而不需要任何额外的代码。您可以查看Support Library Revision网站获取最新版本。