作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前我在 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>
关于java - 如何在主页上交换 fragment (并修复 java.lang.IllegalArgumentException : No view found for id 0x7f08007c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58196613/
我是一名优秀的程序员,十分优秀!