我遇到的情况就像我有一个包含(登录/注册片段)的MainActivity。而且我有一个HomeActivity(其中包含带有抽屉布局的Navigationview。)
和两个活动都具有各自的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>
请让我知道我所缺少的。我在这个问题上坚持了几个星期。
答案 0 :(得分:3)
在MainActivity中,其中包含(登录/注册片段) 使用下面给出的代码:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
frgmtloginbtn.setOnClickListener {
findNavController().navigate(R.id.mainActivity)
}
}
不要传递任何片段的ID,而应传递主要活动或登录/注册活动
在您的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" />
如果有其他查询让我知道很高兴为您提供帮助,
答案 1 :(得分:2)
在您的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链接下面有导航抽屉,该导航抽屉会在登录按钮单击时打开,根据查询的要求
有关详细说明 关注git Link-> https://github.com/gautammittal23/NaV_Graph_With_login_navigation_drawer