Android Jetpack导航,使用Youtube或Instagram的BottomNavigationView,如正确的后退导航(片段后退堆栈)?

Android Jetpack导航,使用Youtube或Instagram的BottomNavigationView,如正确的后退导航(片段后退堆栈)?,第1张

概述AndroidJetpack导航,BottomNavigationView在后退按钮上点击自动片段后栈?我想要的是,在用户一个接一个地选择多个标签后,用户点击后退按钮应用必须重定向到他/她打开的最后一页.通过在ArrayList中保存当前选定的项目,我使用AndroidViewPager实现了相同的功能.AndroidJetpack导

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,如正确的后退导航(片段后退堆栈)?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1098937.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存