首页 > 解决方案 > 我可以在一个 NavHostFragment 中启动两个片段吗?

问题描述

我有一个片段屏幕,其中包含两个部分 1)图像卡和 2)带有视图寻呼机的选项卡布局,它们被分成两个 XML 文件和两个片段生命周期 java 文件。此外,我的活动中有一个 NAV 主机片段和一个 NAV 图表。我能否在 NAV 主机片段中同时启动两个 XML,以便我可以垂直显示两个 XML(第 1)和第 2)部分。

备注:我没有空间添加/创建 XML/NAVHostFragment 以包含两个 XML。Java中的任何东西都对我有用。

任何人都对在这种情况下如何做到这一点有任何见解?

这是我开始的:

活动.xml

<LinearLayout 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="wrap_content"
    android:orientation="vertical"
    app:layout_scrollFlags="scroll">

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

图像卡.xml

<androidx.cardview.widget.CardView
     android:id="@+id/cardview"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
    
         <ImageView
            android:id="@+id/imageview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    
</androidx.cardview.widget.CardView>

viewpager.xml

<LinearLayout 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="wrap_content"
    android:orientation="vertical">

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">


    </com.google.android.material.tabs.TabLayout>


    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/viewpager2"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

标签: androidandroid-fragmentsnavigation

解决方案


一个可能的解决方案是:

  1. MainFragment使用 viewpager创建一个片段。
  2. 将该片段设置为导航图中的起始目的地。
  3. 在s viewpager中加载cardimagetabLayoutMainFragment
  4. 通过调用将主 Viewpager 的方向设置为垂直setOrientation()

推荐阅读