gpt4 book ai didi

java - 如何在主页上交换 fragment (并修复 java.lang.IllegalArgumentException : No view found for id 0x7f08007c)

转载 作者:行者123 更新时间:2023-12-02 01:18:16 25 4
gpt4 key购买 nike

目前我在 Android Studio 中使用默认的抽屉导航 Activity 结构。我在fragment_home.xml 有一个按钮。我希望按钮有一个 onClickListener,当用户点击它时,用户会重定向到另一个 fragment xml 文件,在本例中是从 Home Fragment 到 Collection Fragment。

默认情况下,会有一个汉堡菜单供用户选择 fragment 。但在这种情况下,我希望用户也能够直接在主页 fragment 上选择 fragment 。

我在 HomeFragment 中有此代码(用户将看到的第一个 fragment 页面):

private HomeViewModel homeViewModel;

public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
homeViewModel =
ViewModelProviders.of(this).get(HomeViewModel.class);
View root = inflater.inflate(R.layout.fragment_home, container, false);

//button to swap the fragment to collection fragment

Button button = (Button) root.findViewById(R.id.runCollection);
button.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
Fragment fragment = new CollectionFragment();

FragmentManager fm = getFragmentManager();
fm.beginTransaction()
.replace(R.id.mobile_navigation, fragment)
.commit();

}
});

return root;
}}
});

R.id.mobile_navigation指的是res>navigation下的mobile_navigation.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/mobile_navigation"
app:startDestination="@+id/nav_home">

<fragment
android:id="@+id/nav_home"
android:name="com.xxx.ui.home.HomeFragment"
android:label="@string/menu_home"
tools:layout="@layout/fragment_home" />

<fragment
android:id="@+id/nav_collection"
android:name="com.xxx.ui.collection.CollectionFragment"
android:label="@string/menu_collection"
tools:layout="@layout/fragment_collection" />

</navigation>

目前,当我按下按钮时,应用程序崩溃,并且日志将显示以下错误消息:

java.lang.IllegalArgumentException: No view found for id 0x7f08007c (com.xxxx.appname:id/mobile_navigation) for fragment CollectionFragment{47e0622 #1 id=0x7f08007c}

最佳答案

  button.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

Navigation.findNavController(view).navigate(R.id.nav_home_to_nav_collection);
}
});

将目的地添加到导航图表

<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/mobile_navigation"
app:startDestination="@+id/nav_home">

<fragment
android:id="@+id/nav_home"
android:name="com.xxx.ui.home.HomeFragment"
android:label="@string/menu_home"
tools:layout="@layout/fragment_home">

<action
android:id="@+id/nav_home_to_nav_collection"
app:destination="@id/nav_collection" />

</fragment>

<fragment
android:id="@+id/nav_collection"
android:name="com.xxx.ui.collection.CollectionFragment"
android:label="@string/menu_collection"
tools:layout="@layout/fragment_collection" />

</navigation>

Get started with the Navigation component

关于java - 如何在主页上交换 fragment (并修复 java.lang.IllegalArgumentException : No view found for id 0x7f08007c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58196613/

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