Как отображать фрагменты только в окне навигации, если вы вошли в систему - PullRequest
0 голосов
/ 24 октября 2019

Я новичок в разработке Android. Я хотел бы понять, как я могу разработать навигационную панель и отображать только отдельные фрагменты, если пользователь вошел в систему. Я безуспешно гуглил.

Пример Если пользователь не вошел в систему, то фрагменты, которые должны увидеть,:

  • Логин
  • Магазин
  • Справка

Но если они вошли в систему, фрагменты должны быть:

  • Магазин
  • Заказы
  • Аккаунт
  • Настройки

Store часто встречается, потому что я хочу, чтобы пользователи все еще моглипросмотрите магазин без логина.

Нужно ли создавать несколько ящиков? Один на MainActivity, который не требует входа в систему, а другой с вошедшими фрагментами на втором Activity, то есть CustomerActivity?

Пожалуйста, примите во внимание любые советы / руководства.

Я не ожидаю никакого кодано если у вас есть, очень ценится.

1 Ответ

0 голосов
/ 25 октября 2019

Вы можете создать два файла ресурсов меню ( menu_logged_in.xml и menu.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 () , чтобы дать им некотороедействия:

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)
    }
...