当前位置: 首页 > 知识库问答 >
问题:

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

严修诚
2023-03-14

使用ASL的25.0BottomNavigationView我遇到了一些问题,比如以编程方式保存选定项(或其索引)和选定项。

共有3个答案

梁成双
2023-03-14

我正在使用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();
        }

卢黎昕
2023-03-14

同意尼古拉的说法!

我也创造了自己的要点

要在旋转后保存状态,您需要添加到活动中:

@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putInt("opened_fragment", bottomNavigation.getCurrentItem());
    super.onSaveInstanceState(outState);
}

在设置BottomNavigationView之后,进入onCreate方法

final defaultPosition = 0;
final int bottomNavigationPosition = savedInstanceState == null ? defaultPosition :
            savedInstanceState.getInt("opened_fragment", defaultPosition);

bottomNavigation.setCurrentItem(bottomNavigationPosition);

这个要点的最大优点是:侦听器的种类很少,它会显示您之前的选择位置,即使位置是以编程方式设置的,侦听器也会做出反应。一切都是用链接编写的,如果需要可以使用。

子车超英
2023-03-14

不幸的是,BottomNavigationView在这个阶段缺少很多功能。

你的问题真的很有趣,我写了这个扩展的BottomNavigationView,它保留了状态,在你的例子中,保存了最后选择的项目。

下面是代码的要点

此扩展包括:

  • 提供public两种方法以编程方式设置和获取选定的项目。
  • 仅为最后一个选择保存和恢复状态。

让我们等到ASL开发者解决这个问题。

 类似资料:
  • 实现在竖屏的NavigationController中push一个横屏的UIViewController,模拟器测试兼容5.0、6.0系统。实现程序中手动旋转屏幕的效果。 [Code4App.com]

  • 在屏幕旋转后,虽然我在super.onCreate(null);,中传递null,但我得到了object返回的nullPointerException异常。我知道在传递savedInstanceState=null的同时必须销毁并重新创建活动,这意味着活动应该在旋转后开始,因为它是第一次开始,为什么在旋转后会出现此异常? onCreate()代码段,其中名为historyText的对象 Logca

  • 我正在使用新的android。支持设计小装置。来自支持库的BottomNavigationView。如何从代码中设置当前选择?我意识到,在旋转屏幕后,选择被更改回第一项。当然,如果有人能告诉我如何在“暂停”功能中“保存”底部导航视图的当前状态,以及如何在“恢复”功能中恢复它,这也会有所帮助。 谢谢

  • 我想在模拟器上测试手机的旋转,我看到我们必须使用CtrlF11的所有地方,但它只旋转模拟器的图像,不会启动配置更改事件或重新绘制活动。 下面是我用CtrlF11得到的: 那么,我必须用什么来模拟真实的旋转呢?

  • 我有3个片段(片段Home、片段A、片段B和片段C)。应用程序首次运行时将显示片段主页(在Mainactivity中设置)。从导航绘图项可以选择每个片段。每个选定项目都将显示详细信息片段。 我在处理数据和保留片段时遇到问题: (1)。当我选择一个片段(例如片段a)时,将显示片段a的页面。但是当我旋转设备时,为什么我的片段返回到片段主页而不是停留在当前片段??如何处理 (2)。在片段B中,我在Gri

  • 我有一个应用程序小部件,当它更新时,获取具有与小部件匹配的维度的图像,并将该图像放入(通过)。它工作得很好。 但是对于支持主屏幕旋转的设备(我不是说基于设备方向的