Android Jetpack导航,BottomNavigationVIEw在后退按钮上点击自动片段后栈?
我想要的是,在用户一个接一个地选择多个标签后,用户点击后退按钮应用必须重定向到他/她打开的最后一页.
通过在ArrayList中保存当前选定的项目,我使用AndroID VIEwPager实现了相同的功能. AndroID Jetpack导航发布后是否有任何自动后退堆栈?我想用导航图实现它
activity_main.xml中
<?xml version="1.0" enCoding="utf-8"?><androID.support.constraint.ConstraintLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:app="http://schemas.androID.com/apk/res-auto" xmlns:tools="http://schemas.androID.com/tools" androID:ID="@+ID/container" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" tools:context=".main.MainActivity"> <fragment androID:ID="@+ID/my_nav_host_fragment" androID:name="androIDx.navigation.fragment.NavHostFragment" androID:layout_wIDth="match_parent" androID:layout_height="0dp" app:defaultNavHost="true" app:layout_constraintBottom_totopOf="@+ID/navigation" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constrainttop_totopOf="parent" app:navGraph="@navigation/nav_graph" /> <androID.support.design.Widget.BottomNavigationVIEw androID:ID="@+ID/navigation" androID:layout_wIDth="0dp" androID:layout_height="wrap_content" androID:layout_marginStart="0dp" androID:layout_marginEnd="0dp" androID:background="?androID:attr/windowBackground" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintleft_toleftOf="parent" app:layout_constraintRight_toRightOf="parent" app:menu="@menu/navigation" /></androID.support.constraint.ConstraintLayout>
navigation.xml
<?xml version="1.0" enCoding="utf-8"?><menu xmlns:androID="http://schemas.androID.com/apk/res/androID"> <item androID:ID="@+ID/navigation_home" androID:icon="@drawable/ic_home" androID:title="@string/Title_home" /> <item androID:ID="@+ID/navigation_people" androID:icon="@drawable/ic_group" androID:title="@string/Title_people" /> <item androID:ID="@+ID/navigation_organization" androID:icon="@drawable/ic_organization" androID:title="@string/Title_organization" /> <item androID:ID="@+ID/navigation_business" androID:icon="@drawable/ic_business" androID:title="@string/Title_business" /> <item androID:ID="@+ID/navigation_tasks" androID:icon="@drawable/ic_dashboard" androID:title="@string/Title_tasks" /></menu>
还补充道
bottomNavigation.setupWithNavController(Navigation.findNavController(this, R.ID.my_nav_host_fragment))
我从Levi Moreira那里得到了一个答案如下
navigation.setonNavigationItemSelectedListener {item -> onNavDestinationSelected(item, Navigation.findNavController(this, R.ID.my_nav_host_fragment)) }
但通过这样做只发生了最后打开的片段的实例再次创建.
为BottomNavigationVIEw提供适当的后向导航
解决方法:
您真的不需要VIEwPager来使用BottomNavigation和新的Navigation架构组件.我一直在使用一个使用两者的示例应用程序,请参阅here.
基本概念是这样,你有主要活动将托管BottomNavigationVIEw,这是导航图的导航主机,这就是它的xml的样子:
activity_main.xml中
<?xml version="1.0" enCoding="utf-8"?><androID.support.constraint.ConstraintLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:app="http://schemas.androID.com/apk/res-auto" xmlns:tools="http://schemas.androID.com/tools" androID:ID="@+ID/container" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" tools:context=".main.MainActivity"> <fragment androID:ID="@+ID/my_nav_host_fragment" androID:name="androIDx.navigation.fragment.NavHostFragment" androID:layout_wIDth="match_parent" androID:layout_height="0dp" app:defaultNavHost="true" app:layout_constraintBottom_totopOf="@+ID/navigation" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constrainttop_totopOf="parent" app:navGraph="@navigation/nav_graph" /> <androID.support.design.Widget.BottomNavigationVIEw androID:ID="@+ID/navigation" androID:layout_wIDth="0dp" androID:layout_height="wrap_content" androID:layout_marginStart="0dp" androID:layout_marginEnd="0dp" androID:background="?androID:attr/windowBackground" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintleft_toleftOf="parent" app:layout_constraintRight_toRightOf="parent" app:menu="@menu/navigation" /></androID.support.constraint.ConstraintLayout>
BottomNavigationVIEw的导航菜单(选项卡菜单)如下所示:
navigation.xml
<?xml version="1.0" enCoding="utf-8"?><menu xmlns:androID="http://schemas.androID.com/apk/res/androID"> <item androID:ID="@+ID/navigation_home" androID:icon="@drawable/ic_home" androID:title="@string/Title_home" /> <item androID:ID="@+ID/navigation_people" androID:icon="@drawable/ic_group" androID:title="@string/Title_people" /> <item androID:ID="@+ID/navigation_organization" androID:icon="@drawable/ic_organization" androID:title="@string/Title_organization" /> <item androID:ID="@+ID/navigation_business" androID:icon="@drawable/ic_business" androID:title="@string/Title_business" /> <item androID:ID="@+ID/navigation_tasks" androID:icon="@drawable/ic_dashboard" androID:title="@string/Title_tasks" /></menu>
所有这些只是BottomNavigationVIEw设置.现在要使它与导航拱组件一起工作,你需要进入导航图编辑器,添加所有的片段目的地(在我的情况下,我有5个,每个选项卡一个),并设置目的地的ID相同name作为navigation.xml文件中的名称:
这将告诉androID在选项卡和片段之间建立链接,现在每次用户单击“主页”选项卡时,androID将负责加载正确的片段.
还有一个kotlin代码需要添加到您的NavHost(主要活动)以使用BottomNavigationVIEw连接起来:
您需要添加onCreate:
bottomNavigation.setupWithNavController(Navigation.findNavController(this, R.ID.my_nav_host_fragment))
这告诉androID在导航架构组件和BottomNavigationVIEw之间进行连接.请参阅docs中的更多内容.
要获得使用youtube时的相同行为,只需添加:
navigation.setonNavigationItemSelectedListener {item -> onNavDestinationSelected(item, Navigation.findNavController(this, R.ID.my_nav_host_fragment)) }
这将使目的地进入后台,因此当您点击后退按钮时,将d出最后访问的目的地.
总结以上是内存溢出为你收集整理的Android Jetpack导航,使用Youtube或Instagram的BottomNavigationView,如正确的后退导航(片段后退堆栈)?全部内容,希望文章能够帮你解决Android Jetpack导航,使用Youtube或Instagram的BottomNavigationView,如正确的后退导航(片段后退堆栈)?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)