使用ASL 25.0 BottomNavigationView
我面临一些麻烦,例如以编程方式保存所选项目(或其索引)和所选项目。
答案 0 :(得分:6)
不幸的是,在此阶段BottomNavigationView
中缺少plenty个功能。
你的问题非常有趣,我写了这个保留状态的扩展BottomNavigationView
,在你的情况下,保存了最后选择的项目。
此扩展程序包括:
让我们等到ASL开发fix this。
答案 1 :(得分:2)
我正在使用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();
}
答案 2 :(得分:1)
同意尼古拉!
我也创建了自己的gist
要在轮播后保存状态,您需要添加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);
这个要点的最大优点是:听众很少,它会显示您之前的选择位置,即使以编程方式设置位置,听众也会做出反应。一切都是用链接写的,如果需要的话可以使用。
答案 3 :(得分:0)
我遇到了同样的问题,我所做的是从 25.0.1 更新为 25.3.1 ,它开始正常工作,无需额外的代码。您可以查看Support Library Revision website以获取最新版本。
我希望它有所帮助。