【发布时间】:2018-07-19 05:21:00
【问题描述】:
我正在尝试在我的项目中实现带有导航组件的 NavigationDrawer。 我有一个 MainActivity 作为入口点和多个片段目的地。我已将抽屉菜单项链接到 nav_graph.xml 中的目的地,一切正常。
我的 NavigationDrawer 中有一个“注销”菜单项选项,单击它我将启动 LoginActivity。我的问题是
- 我将 LoginActivity 添加到我的 nav_graph 并将其链接到抽屉中的注销菜单项,这是正确的方法吗?
- 一旦 LoginActivity 启动,当用户按下系统后退按钮时,我希望应用程序转到启动器屏幕而不是堆栈中的先前目标。这可以通过导航组件实现吗?
这是我的 nav_graph.xml
<?xml version="1.0" encoding="utf-8"?>
<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"
app:startDestination="@id/dashboardFragment">
<fragment
android:id="@+id/dashboardFragment"
android:name="com.example.fragment.DashboardFragment"
android:label="DashboardFragment"
tools:layout="@layout/fragment_dashboard" />
<fragment
android:id="@+id/profileFragment"
android:name="com.example.fragment.ProfileFragment"
android:label="ProfileFragment"
tools:layout="@layout/fragment_profile" />
<fragment
android:id="@+id/settingsFragment"
android:name="com.example.fragment.SettingsFragment"
android:label="SettingsFragment"
tools:layout="@layout/fragment_sale_edit" />
<activity
android:id="@+id/loginActivity"
android:name="com.example.activity.LogoutActivity"
android:label="LogoutActivity"></activity>
</navigation>
这是我的drawer_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="navigationView">
<group android:checkableBehavior="single">
<item
android:id="@+id/dashboardFragment"
android:icon="@drawable/ic_menu_camera"
android:title="Dashboard" />
<item
android:id="@+id/profileFragment"
android:icon="@drawable/ic_menu_gallery"
android:title="Profile" />
<item
android:id="@+id/settingsFragment"
android:icon="@drawable/ic_menu_slideshow"
android:title="Sale Edits" />
<item
android:id="@+id/loginActivity"
android:icon="@drawable/ic_menu_manage"
android:title="Logout" />
</group>
</menu>
<fragment
android:id="@+id/navHostFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph"/>
【问题讨论】:
-
为什么不使用片段而不是活动登录?
-
抱歉回复晚了。通过将登录作为片段,它也使工具栏出现在登录屏幕上,我不希望在登录屏幕中也有工具栏,这将是为每个片段创建工具栏的开销,当它对所有片段都相同时。我有一个完全不同的登录屏幕流程,例如登录->注册或登录->忘记密码等。我不想混淆它们
-
您可以使用登录作为片段并处理 NavHostFragment.findNavController( nav_host_fragment ).addOnNavigatedListener() 中主要活动的工具栏逻辑,这是比登录活动更好的解决方案。
-
您的意思是,在这种情况下,当用户单击注销选项时,以编程方式隐藏工具栏?并在登录后再次显示?
-
是的,根据当前目的地处理工具栏逻辑,我在这里添加了一些代码:stackoverflow.com/a/51491743/1268507
标签: android navigation-drawer android-navigation android-architecture-navigation