gpt4 book ai didi

Android - 如何使用导航处理来自父 fragment 的嵌套图 fragment ?

转载 作者:行者123 更新时间:2023-11-29 22:49:54 32 4
gpt4 key购买 nike

enter image description here

这是场景:-

我有一个 Main Activity,它有根 NavGraph 和默认加载 fragment A。如果我从 fragment A 移动到 fragment B,其中有子 fragment 和 TabLayout,那么用户可以在其中切换 fragment ,为此我在 fragment B 中为子 fragment 创建了一个新的嵌套图。当我从 fragment 移动时A 到 Fragment B,我能够在我的子 Fragment 中显示 Fragment C,因为我在我的嵌套图表中将开始目标设置为 Fragment C。

***root Navigation Graph***



<?xml version="1.0" encoding="utf-8"?>
<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"
app:startDestination="@id/fragmentC">

<fragment
android:id="@+id/FragmentA"
android:name="com.myapp.fragment.FragmentA"
android:label="Fragment A"
tools:layout="@layout/fragment_A">
<action
android:id="@+id/action_fragmentA_to_fragmentB"
app:destination="@id/fragmentB" />
</fragment>
<fragment
android:id="@+id/fragmentB"
android:name="com.myapp.fragment.FragmentB"
android:label="FragmentB"
tools:layout="@layout/fragment_B">
<action
android:id="@+id/action_fragmentB_to_second_graph"
app:destination="@id/navigation_graph2" />
</fragment>

<include app:graph="@navigation/navigation_graph2" />

</navigation>


***Nested Navigation Graph***


<?xml version="1.0" encoding="utf-8"?>
<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_graph2"
app:startDestination="@id/FragmentC">

<fragment android:id="@+id/FragmentC"
android:name="com.myapp.fragment.FragmentC"
android:label="Fragment C"
tools:layout="@layout/fragment_C">
<action
android:id="@+id/action_fragmentC_fragmentD"
app:destination="@id/FragmentD" />
</fragment>

<fragment android:id="@+id/FragmentD"
android:name="com.myapp.fragment.FragmentD"
android:label="Fragment D"
tools:layout="@layout/fragment_D">
<action
android:id="@+id/action_fragmentD_fragmentC"
app:destination="@id/FragmentC" />
</fragment>
</navigation>

***Inside Fragment B***

public class FragmentB extends BaseFragment<FragmentAssignmentsBinding>
implements TabLayout.OnTabSelectedListener{

NavController nestedNavController;

@Override
public int getLayoutId() {
return R.layout.fragment_assignments;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
if(getFragmentDataBinding()==null)
return;
nestedNavController = Navigation.findNavController(view);
getFragmentDataBinding().myTabLayout.addOnTabSelectedListener(this);
}



@Override
public void onTabSelected(TabLayout.Tab tab) {

switch (tab.getPosition()) {
case 0:
//***Here how to handle the nested graph Fragment Action ?***
nestedNavController.navigate(R.id. action_fragmentC_fragmentD);
break;
case 1:
nestedNavController.navigate(R.id. action_fragmentD_fragmentC);
break;
}

}

@Override
public void onTabUnselected(TabLayout.Tab tab) {

}

@Override
public void onTabReselected(TabLayout.Tab tab) {

}
}

现在的问题是 -> 从 parentFragment(Fragment B) 点击 Tab A 或 Tab B,我必须访问嵌套的 NavGraph 操作来替换 parentFragment 中的 fragment 。但是遇到错误:-

java.lang.IllegalArgumentException: navigation destination com.myapp:id/action_fragmentC_fragmentD is unknown to this NavController

任何帮助或指导都会非常有帮助。

最佳答案

引用 Ian Lake's answer

As per this issue:

Navigation focuses on elements that affect the back stack and tabs do not affect the back stack - you should continue to manage tabs with a ViewPager and TabLayout

因此您必须将 ViewPager 与 tablayout 一起使用,而不是嵌套导航图。

请看tablayout branch一个工作示例。

关于Android - 如何使用导航处理来自父 fragment 的嵌套图 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58072616/

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