带有 NavigationView 的嵌套导航图
Nested Navigation Graph With NavigationView in it
我的场景就像我有一个包含(login/signup 个片段)的 MainActivity。我有一个 HomeActivity(其中包含带抽屉布局的导航视图。)
并且这两项活动都有各自的 navigation_graph。当我在 main_navigation_graph 中包含 home_navigation_graph 并导航到它时,DrawerLayout 不起作用。但是当我单独执行它时,就像没有嵌套只调用 home_navigation_graph(HomeActivity) 作为启动器一样,一切正常。
这是我的示例代码:
<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_graph_login"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/loginFragment"
android:name="com.example.app.ui.login.LoginFragment"
android:label="LoginFragment"
tools:layout="@layout/fragment_login">
<action
android:id="@+id/action_loginFragment_to_signupFragment"
app:destination="@id/signupFragment" />
<action
android:id="@+id/action_loginFragment_to_mobile_navigation"
app:destination="@id/mobile_navigation"
app:launchSingleTop="true"
app:popUpTo="@+id/nav_graph_login"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/signupFragment"
android:name="com.example.app.ui.signup.SignupFragment"
android:label="SignupFragment"
tools:layout="@layout/fragment_signup">
<action
android:id="@+id/action_signupFragment_to_loginFragment"
app:destination="@id/loginFragment"
app:launchSingleTop="true"
app:popUpTo="@id/signupFragment"
app:popUpToInclusive="true" />
</fragment>
<include app:graph="@navigation/mobile_navigation" />
</navigation>
当我在单击登录按钮时调用第二个移动导航图(使用代码 belwo)时,HomeActivity 打开但只有 homeDestinationFragment 是可见的,其余没有任何作用
findNavController().navigate(R.id.action_loginFragment_to_mobile_navigation)
下面的代码是 home_navigation_graph.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.example.app.ui.home.HomeFragment"
android:label="@string/menu_home"
tools:layout="@layout/fragment_home" />
<fragment
android:id="@+id/nav_gallery"
android:name="com.example.app.ui.earnings.VendorEarningFragment"
android:label="@string/menu_vendor_earning"
tools:layout="@layout/fragment_vendor_earning" />
<fragment
android:id="@+id/nav_slideshow"
android:name="com.example.app.ui.slideshow.SlideshowFragment"
android:label="@string/menu_slideshow"
tools:layout="@layout/fragment_slideshow" />
<fragment
android:id="@+id/nav_tools"
android:name="com.example.app.ui.tools.ToolsFragment"
android:label="@string/menu_tools"
tools:layout="@layout/fragment_tools" />
<fragment
android:id="@+id/nav_share"
android:name="com.example.app.ui.share.ShareFragment"
android:label="@string/menu_share"
tools:layout="@layout/fragment_share" />
<fragment
android:id="@+id/nav_send"
android:name="com.example.app.ui.send.SendFragment"
android:label="@string/menu_send"
tools:layout="@layout/fragment_send" />
</navigation>
请让我知道我缺少什么。我被困在这几个星期了。
在您的 home_navigation_graph 中只包含抽屉布局和导航菜单而不是整个图表。它对我来说效果很好,你可以查看我的 github 存储库。
替换下面的行
<include app:graph="@navigation/mobile_navigation" />
使用下面的代码片段
<activity
android:id="@+id/mainActivity"
android:name="com.example.nav_experiment.MainActivity"
android:label="activity_main"
tools:layout="@layout/activity_main" />
在下面 Git link 有导航抽屉,点击登录按钮打开,根据查询要求
详细说明
关注 git Link -> https://github.com/gautammittal23/NaV_Graph_With_login_navigation_drawer
In MainActivity 其中包含(login/signup 个片段)
使用下面给出的代码:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
frgmtloginbtn.setOnClickListener {
findNavController().navigate(R.id.mainActivity)
}
}
不要传递任何片段的 id 而不是传递主 activity 或 login/signup Activity
在您的 home_navigation_graph 中只包含抽屉布局和导航菜单而不是整个图表。它会正常工作
<include app:graph="@navigation/mobile_navigation" />
并替换为
<activity
android:id="@+id/mainActivity"
android:name="com.example.nav_experiment.MainActivity"
android:label="activity_main"
tools:layout="@layout/activity_main" />
我希望这对你有用,如果有任何其他查询让我知道很乐意帮助你
我的场景就像我有一个包含(login/signup 个片段)的 MainActivity。我有一个 HomeActivity(其中包含带抽屉布局的导航视图。)
并且这两项活动都有各自的 navigation_graph。当我在 main_navigation_graph 中包含 home_navigation_graph 并导航到它时,DrawerLayout 不起作用。但是当我单独执行它时,就像没有嵌套只调用 home_navigation_graph(HomeActivity) 作为启动器一样,一切正常。 这是我的示例代码:
<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_graph_login"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/loginFragment"
android:name="com.example.app.ui.login.LoginFragment"
android:label="LoginFragment"
tools:layout="@layout/fragment_login">
<action
android:id="@+id/action_loginFragment_to_signupFragment"
app:destination="@id/signupFragment" />
<action
android:id="@+id/action_loginFragment_to_mobile_navigation"
app:destination="@id/mobile_navigation"
app:launchSingleTop="true"
app:popUpTo="@+id/nav_graph_login"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/signupFragment"
android:name="com.example.app.ui.signup.SignupFragment"
android:label="SignupFragment"
tools:layout="@layout/fragment_signup">
<action
android:id="@+id/action_signupFragment_to_loginFragment"
app:destination="@id/loginFragment"
app:launchSingleTop="true"
app:popUpTo="@id/signupFragment"
app:popUpToInclusive="true" />
</fragment>
<include app:graph="@navigation/mobile_navigation" />
</navigation>
当我在单击登录按钮时调用第二个移动导航图(使用代码 belwo)时,HomeActivity 打开但只有 homeDestinationFragment 是可见的,其余没有任何作用
findNavController().navigate(R.id.action_loginFragment_to_mobile_navigation)
下面的代码是 home_navigation_graph.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.example.app.ui.home.HomeFragment"
android:label="@string/menu_home"
tools:layout="@layout/fragment_home" />
<fragment
android:id="@+id/nav_gallery"
android:name="com.example.app.ui.earnings.VendorEarningFragment"
android:label="@string/menu_vendor_earning"
tools:layout="@layout/fragment_vendor_earning" />
<fragment
android:id="@+id/nav_slideshow"
android:name="com.example.app.ui.slideshow.SlideshowFragment"
android:label="@string/menu_slideshow"
tools:layout="@layout/fragment_slideshow" />
<fragment
android:id="@+id/nav_tools"
android:name="com.example.app.ui.tools.ToolsFragment"
android:label="@string/menu_tools"
tools:layout="@layout/fragment_tools" />
<fragment
android:id="@+id/nav_share"
android:name="com.example.app.ui.share.ShareFragment"
android:label="@string/menu_share"
tools:layout="@layout/fragment_share" />
<fragment
android:id="@+id/nav_send"
android:name="com.example.app.ui.send.SendFragment"
android:label="@string/menu_send"
tools:layout="@layout/fragment_send" />
</navigation>
请让我知道我缺少什么。我被困在这几个星期了。
在您的 home_navigation_graph 中只包含抽屉布局和导航菜单而不是整个图表。它对我来说效果很好,你可以查看我的 github 存储库。
替换下面的行
<include app:graph="@navigation/mobile_navigation" />
使用下面的代码片段
<activity
android:id="@+id/mainActivity"
android:name="com.example.nav_experiment.MainActivity"
android:label="activity_main"
tools:layout="@layout/activity_main" />
在下面 Git link 有导航抽屉,点击登录按钮打开,根据查询要求
详细说明 关注 git Link -> https://github.com/gautammittal23/NaV_Graph_With_login_navigation_drawer
In MainActivity 其中包含(login/signup 个片段) 使用下面给出的代码:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
frgmtloginbtn.setOnClickListener {
findNavController().navigate(R.id.mainActivity)
}
}
不要传递任何片段的 id 而不是传递主 activity 或 login/signup Activity
在您的 home_navigation_graph 中只包含抽屉布局和导航菜单而不是整个图表。它会正常工作
<include app:graph="@navigation/mobile_navigation" />
并替换为
<activity
android:id="@+id/mainActivity"
android:name="com.example.nav_experiment.MainActivity"
android:label="activity_main"
tools:layout="@layout/activity_main" />
我希望这对你有用,如果有任何其他查询让我知道很乐意帮助你