在屏幕旋转期间保存BottomNavigationView选中的项目



使用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;

通过在

变量中取选中的菜单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网站获取最新版本。

相关内容

  • 没有找到相关文章

最新更新