在屏幕旋转期间保存 BottomNavigationView 所选项目
Save BottomNavigationView selected item during screen rotation
使用 ASL 的 25.0 BottomNavigationView
我遇到了一些麻烦,例如以编程方式保存所选项目(或他的索引)和所选项目。
遗憾的是,现阶段 BottomNavigationView
中缺少 plenty 项功能。
你的问题真的很有趣,我写了这个扩展 BottomNavigationView
来保留状态,在你的情况下,保存最后选择的项目。
此扩展包括:
- 提供 public 两种以编程方式设置和获取所选项目的方法。
- 仅为最后一次选择保存和恢复状态。
让我们等到 ASL 开发者 fix this。
同意尼古拉!
我也创建了自己的 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);
这个要点的最大优点是:侦听器种类很少,它会向您显示之前的选择位置,即使以编程方式设置位置,侦听器也会做出反应。一切都写在link中,如果需要请使用。
我正在使用 BottomNavigationView,这里是应用程序在屏幕旋转时正常工作的代码。
首先,我创建了一个变量来保存所选菜单的 id
private 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 以获取最新版本。
希望对您有所帮助。
使用 ASL 的 25.0 BottomNavigationView
我遇到了一些麻烦,例如以编程方式保存所选项目(或他的索引)和所选项目。
遗憾的是,现阶段 BottomNavigationView
中缺少 plenty 项功能。
你的问题真的很有趣,我写了这个扩展 BottomNavigationView
来保留状态,在你的情况下,保存最后选择的项目。
此扩展包括:
- 提供 public 两种以编程方式设置和获取所选项目的方法。
- 仅为最后一次选择保存和恢复状态。
让我们等到 ASL 开发者 fix this。
同意尼古拉!
我也创建了自己的 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);
这个要点的最大优点是:侦听器种类很少,它会向您显示之前的选择位置,即使以编程方式设置位置,侦听器也会做出反应。一切都写在link中,如果需要请使用。
我正在使用 BottomNavigationView,这里是应用程序在屏幕旋转时正常工作的代码。
首先,我创建了一个变量来保存所选菜单的 id
private 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 以获取最新版本。
希望对您有所帮助。