【问题标题】:Navigation controller navigate from startDestination fragment getting exception导航控制器从 startDestination 片段导航获取异常
【发布时间】:2018-09-21 09:14:17
【问题描述】:
java.lang.IllegalArgumentException: ID does not reference a View inside this Activity

    mBtHome.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {



                    Navigation.findNavController(getActivity(), R.id.homePageFragment);
                }
            });  

startDestination 片段内的 mBtHome 按钮

导航图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/nav_file"
    app:startDestination="@id/mainFragment">
    <fragment
        android:id="@+id/mainFragment"
        android:name="com.example.libin.navigationhelphertest.ui.main.MainFragment"
        android:label="main_fragment"
        tools:layout="@layout/main_fragment">
        <action
            android:id="@+id/action_mainFragment_to_homePageFragment"
            app:destination="@id/homePageFragment" />
        <action
            android:id="@+id/action_mainFragment_to_usersListFragment"
            app:destination="@id/usersListFragment" />
    </fragment>
    <fragment
        android:id="@+id/homePageFragment"
        android:name="com.example.libin.navigationhelphertest.ui.main.HomePageFragment"
        android:label="fragment_home_page"
        tools:layout="@layout/fragment_home_page" />
    <fragment
        android:id="@+id/usersListFragment"
        android:name="com.example.libin.navigationhelphertest.ui.main.UsersListFragment"
        android:label="fragment_users_list"
        tools:layout="@layout/fragment_users_list" />
</navigation>

在 MainActivity xml 文件中添加了导航/导航文件 NavHostFragment 也包括在内,还添加了 defaultNavHost= "true"

【问题讨论】:

  • 您能否发布您的导航图 xml 文件?
  • @Android_team 用 xml 编辑
  • 所以从您的 MainFragment 开始,您正在执行此代码并导航到 Home Fragemt right ?mBtHome.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Navigation.findNavController(getActivity (), R.id.homePageFragment); } });
  • 就是这样。我有两个动作
  • @LibinThomas 你得到答案了吗?

标签: android navigationcontroller android-jetpack android-architecture-navigation


【解决方案1】:

根据上面的代码,点击按钮从一个片段导航到另一个片段,有很多方法。

导航类为您提供了 createNavigateOnClickListner() 方法,您只需传递片段操作 ID。

试试下面的代码

 mBtHome.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_mainFragment_to_homePageFragment));

【讨论】:

【解决方案2】:

R.id.homePageFragment 不是 NavHostFragment 像他一样做事

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

然后像这样调用代码

                Navigation.findNavController(requireActivity(), R.id.fragment_container_view).navigate(R.id.show_one)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2020-07-14
    相关资源
    最近更新 更多