【发布时间】:2016-10-31 21:20:52
【问题描述】:
使用 ASL 的 25.0 BottomNavigationView 我遇到了一些麻烦,例如以编程方式保存选定项目(或他的索引)和选定项目。
【问题讨论】:
标签: android android-support-library android-support-design
使用 ASL 的 25.0 BottomNavigationView 我遇到了一些麻烦,例如以编程方式保存选定项目(或他的索引)和选定项目。
【问题讨论】:
标签: android android-support-library android-support-design
【讨论】:
同意尼古拉的观点!
我也创建了自己的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);
这个要点的最大优点是:听众种类很少,它向您显示以前的选择位置,即使位置以编程方式设置,听众也会做出反应。一切都写在链接中,如果需要,请使用。
【讨论】:
Activity 类。
我正在使用 BottomNavigationView,这是应用程序在屏幕旋转时正常工作的代码。
首先,我创建了一个变量来保存所选菜单的 idprivate int saveState;
通过在变量中获取所选菜单 id 来保存 id 的值
@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 website 获取最新版本。
希望对你有帮助。
【讨论】: