首页 > 解决方案 > 如果登录,如何仅在导航抽屉上显示片段

问题描述

我是android开发的新手。我想了解如何开发导航抽屉并仅在用户登录时显示特定片段。我用谷歌搜索但没有运气。

示例 如果用户未登录,应该看到的片段是:

但是如果他们登录了,片段应该是:

Store很常见,因为我希望用户仍然能够在不登录的情况下浏览商店。

我需要创建多个抽屉吗?一个在不需要登录的 MainActivity 上,另一个在第二个 Activity 上登录片段,即 CustomerActivity?

请任何建议/指南将不胜感激。

我不希望有任何代码,但如果你有任何代码,非常感谢。

标签: androidandroid-fragmentsnavigation-drawer

解决方案


您可以在菜单资源目录下创建两个菜单资源文件(menu_logged_in.xmlmenu.xml)。(这里是 res/menu/xml 文件)

例如 menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

        <item   android:id="@+id/menu_login"
                android:title="@string/string_menu_login"
                android:icon="@drawable/ic_login"/>

        <item   android:id="@+id/menu_store"
                android:icon="@drawable/ic_store"
                android:title="@string/string_menu_store"/>

        <item   android:id="@+id/menu_help"
                android:icon="@drawable/ic_menu_help"
                android:title="@string/string_menu_help"/>
</menu>

然后在您的onCreateOptionsMenu()中,您可以检查是否已登录并据此扩充您的菜单。

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        val inflater = menuInflater

        if(loggedIn)
          inflater.inflate(R.menu.menu_logged_in, menu)
        else
          inflater.inflate(R.menu.menu, menu)

        return true
      }

请记住在您的onOptionsItemSelected()方法中管理所有 id,以便为它们提供一些操作:

override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when(item.itemId){
            R.id.menu_store -> {
                //go to fragment store
            }
            R.id.menu_settings -> {
                //go to settings
            }
            R.id.menu_login -> {
                //go to login
            }
            ...etc
        }
        return super.onOptionsItemSelected(item)
    }

推荐阅读