很长一段时间以来,我一直在研究如何保存片段之间的状态,所以当我返回时,就好像你从未离开过一样。谷歌照片就是一个重要的例子。当你滚动浏览你的照片,然后转到另一个片段并返回时,你会保持原样。我的问题是,既然我的应用程序加载了不同的片段,当它们返回到这些片段时,它们会被重新创建,而不是像谷歌照片那样加载以前的状态,那么这怎么可能实现呢。我所尝试的:
定义nav_host_fragment的部分代码,因为它是navView
appBarConfiguration = new AppBarConfiguration.Builder(
R.id.navigation_home, R.id.navigation_profile, R.id.navigation_locate, R.id.navigation_contact_messages, R.id.navigation_settings)
.build();
navController = Navigation.findNavController(this, R.id.nav_host_fragment);
//NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(navView, navController);
navController = Navigation.findNavController(this, R.id.nav_host_fragment);
//NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(navView, navController);
navView.setOnNavigationItemReselectedListener(menuItem -> {
});
navController.addOnDestinationChangedListener((controller, destination, arguments) -> {
if (destination.getLabel() != null) {
if (levelsFragment[0].equals(destination.getLabel().toString())) {
//reemplazar por accion
} else if (levelsFragment[1].equals(destination.getLabel().toString())) {
//reemplazar por accion
} else if (levelsFragment[2].equals(destination.getLabel().toString())) {
//reemplazar por accion
} else if (levelsFragment[3].equals(destination.getLabel().toString())) {
//reemplazar por accion
} else if (levelsFragment[4].equals(destination.getLabel().toString())) {
//reemplazar por accion
}
}
});
包含底部导航的Mainactive的xml:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_wrapper"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
style="@style/bottomNav"
android:layout_width="0dp"
app:itemTextColor="@color/quantum_grey"
android:animateLayoutChanges="true"
app:labelVisibilityMode="auto"
app:itemIconTint="@color/colorAccent"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/bottom_nav_menu" />
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="?actionBarSize"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@id/nav_view"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation" />
</androidx.constraintlayout.widget.ConstraintLayout>
例如,在项目重选中,我将其留空,因为每次我浏览它都会为我创建一个新实例。addOnDestinationChangedListener认为这是保存状态的地方。任何帮助都将不胜感激。这是完美解释我想要实现的页面:Material.io
底部导航在Android和iOS上的行为不同。选择底部导航项目(当前未选择的项目)时,每个平台显示不同的结果:
当需要改善用户体验时,可以覆盖默认平台导航。例如,一个需要在分区之间频繁切换的Android应用程序可以保留每个分区的状态。或者,如果iOS应用程序更适合使用情况,它可以将用户返回到顶层屏幕(或重置其滚动位置)。
这是一封来自Google Issue Tracker的电子邮件。在谷歌照片中,我清楚地表达了我的担忧,这是正确的。必须有解决问题的办法
对于使用新导航库和底部导航栏的最终用户来说,此错误的两个最大问题和烦恼是:
我通过搜索互联网找到了这个,但它在kotlin中,有些东西我不能很好地理解,我不知道它是否正是我需要的:GitHub中的代码
我不知道是否有更干净的方法可以做到这一点,但也许你可以尝试保存一些重要的东西来重新创建视图(比如滚动位置和内联搜索),然后在重新打开时自动滚动到旧位置。还可以保存旧实例(如果存在滚动数据),然后在切换回时将旧版本复制回,而不是生成新版本。请小心复制旧屏幕对象,而不是设置引用,因为在生成下一个屏幕对象时,它显然会被删除。。
我的主要活动中有一个底部导航栏。通过单击底部导航中的一个选项卡,我想更改视图中的片段。我有以下代码:主要活动: } 我的一个片段: 如果我单击其中一个选项卡,就会显示正确的片段,因此这是可行的。然而,当新片段出现时,我想单击另一个选项卡来显示另一个片段,这就行不通了。底部导航栏不会对单击做出反应。甚至日志。i语句不起作用,因此似乎没有调用导航项SelectedListener。 我对android
有人听说过com吗。谷歌。Android应用程序。照片。准许谷歌照片?我似乎在文档中的任何地方都找不到它,但运行4.3及以上版本的用户例外。 如果你有任何关于它的信息,请分享 谢谢你
Tabbar 底部导航栏 1.4.8 优点: 此组件一般用于应用的底部导航,具有如下特点: 可以设置凸起的按钮,且是全端通用的 图标可以使用字体图标(内置图标和扩展图标)或者图片 可以动态切换菜单的数量以及配置 切换菜单之前,可以进行回调鉴权 可以设置角标 有效防止组件区域高度塌陷,无需给父元素额外的内边距或者外边距来避开导航的区域 缺点: 虽然优点很多,但是如果用此组件模拟tabbar页面的话依
我有一个具有以下4种布局的项目: 实际上,我有一个活动,其中包含一个底部的应用程序栏和一个NavHostFragment,在那里注入片段。主要片段是主视图。有一个管理和一个设置片段,它们都是与主视图类似的顶级视图,但并不相互依赖。这3个片段可以通过单击导航抽屉中的项目进行切换。为了简化,我正在尝试新的导航架构组件。 现在我有一些设计问题: 我是否应该将底部的应用程序栏移动到片段中,因为它们彼此不依
我的应用程序有能力从库中选择照片。正是我想要的文件路径从这个选择。
我想集成谷歌照片api在Android,我已经做了谷歌登录过程中,但我不能得到访问令牌,因为我得到错误的FixedCreentalsProvider.create方法,而传递参数。