gpt4 book ai didi

android - 使用 Android 导航架构组件在导航图中进行简单导航

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:03 26 4
gpt4 key购买 nike

这是一个简单的导航设置示例,经过一段时间的研究后,我无法使用导航组件库。

假设我有以下屏幕: enter image description here

顶部的粘性 fragment 和底部的 fragment 在各自的导航图中,这里是 main_activity.xml:

<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<fragment
android:id="@+id/nav_sticky_top"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="50dp"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/navigation_graph_sticky_top" />

<fragment
android:id="@+id/navigation_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/nav_sticky_top"
app:navGraph="@navigation/navigation_graph" />

</androidx.constraintlayout.widget.ConstraintLayout>

当我按下“导航到同级 fragment ”时,它导航到底部导航图中的同级 fragment ,这是正确的,结果:

enter image description here

这是 navigation_graph.xml:

<navigation 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/navigation_graph.xml"
app:startDestination="@id/blankFragment1">

<fragment
android:id="@+id/blankFragment1"
android:name="com.example.myapplication.BlankFragment1"
android:label="fragment_blank_fragment1"
tools:layout="@layout/fragment_blank_fragment1">

<action
android:id="@+id/action_blankFragment1_to_siblingFragment"
app:destination="@id/siblingFragment" />

</fragment>

<fragment
android:id="@+id/siblingFragment"
android:name="com.example.myapplication.SiblingFragment"
tools:layout="@layout/fragment_sibling_fragment" />

</navigation>

现在我想实现“导航到全屏 fragment ”按钮,它应该导航到一个全屏 fragment ,它在一个单独的第三个导航图中,应该在粘性 fragment 导航图和下面的导航图之上。如何正确实现这一点?我的意思是没有黑客,例如将顶部导航图 fragment 的可见性设置为 GONE 并在底部导航图中导航到全屏 fragment 。

最佳答案

更新:我不再推荐这种方法。对于小型应用程序,它可能适合您,但在尝试在不同 NavHostFragments 中托管的不同导航图之间传递数据时,我遇到了麻烦。我认为最简单的方法是在顶层布局中隐藏 fragment 以允许全屏 View 。您可以添加一个 addOnDestinationChangedListener 来监听您想要全屏显示的目的地,并简单地隐藏所需的 fragment 。

原始答案:我在我的应用程序中这样做,效果很好。您应该使用 main_nav_graph.xml 将所有当前 fragment 包装在父 fragment 中。例如:

<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<fragment
android:id="@+id/main_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/main_nav_graph" />

</androidx.constraintlayout.widget.ConstraintLayout>

然后您的全屏 fragment 导航将如下所示:

<navigation 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/main_nav_graph.xml"
app:startDestination="@id/main_fullscreen">

<fragment
android:id="@+id/main_fullscreen"
android:name="com.example.myapplication.MainFullscreen" >

<action
android:id="@+id/action_main_fullscreen_to_fullscreen2"
app:destination="@id/fullscreen2" />

</fragment>

<fragment
android:id="@+id/fullscreen2"
android:name="com.example.myapplication.Fullscreen2" />
</navigation>

MainFullscreen 的布局类似于您提供的 ConstraintLayout。只需确保将 app:defaultNavHost="true" 添加到所有子 NavHostFragments。

然后当我想从你的 blankFragment1 导航到 fullscreen2 时,我调用这个:

Navigation.findNavController(activity!!, R.id.main_host_fragment).navigate(R.id.action_main_fullscreen_to_fullscreen2)

诚然,如果导航图实际上没有连接(除非处于同一 Activity 中),那么使用导航图并没有多大意义,但我只是喜欢导航图在导航编辑器中为您提供的应用程序的漂亮图片:)

关于android - 使用 Android 导航架构组件在导航图中进行简单导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54323811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com