Как установить NavigationView с помощью AppBarConfiguration? - PullRequest
1 голос
/ 20 января 2020

Я новичок в навигации, мой начальный пункт назначения в компоненте навигации не совпадает с моим главным пунктом назначения, поэтому я использовал AppBarConfiguration, чтобы использовать собственный верхний пункт назначения, но когда я хочу установить NavigationView с помощью navController с помощью NavigationUI.setupWithNavController(binding.navView, navController) для установки компонента навигации с элементами ящика, но приложение не распознает мой пользовательский верхний пункт назначения, когда я нажимаю элемент в блоке навигации, перехожу к другому фрагменту и нажимаю кнопку назад, чтобы вернуться к верхнему пункту назначения. Он показывает мне начальный пункт назначения, но я хочу увидеть пользовательский верхний пункт назначения, это их основной код активности:

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import androidx.drawerlayout.widget.DrawerLayout
import androidx.navigation.NavController
import androidx.navigation.NavDestination
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.NavigationUI
import com.example.android.pass.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    private lateinit var drawerLayout: DrawerLayout
    private lateinit var appBarConfiguration: AppBarConfiguration
    private lateinit var binding: ActivityMainBinding
    private lateinit var navController: NavController
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setTheme(R.style.AppTheme)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        val toolbar= binding.toolbar
        drawerLayout = binding.drawerLayout
        navController = this.findNavController(R.id.myNavHostFragment)
        setSupportActionBar(toolbar)
        navController
            .addOnDestinationChangedListener { nc: NavController, nd: NavDestination, args: Bundle? ->
                if (nd.id == R.id.accountListFragment) {
                drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
                } else {
                    drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
                }
            }

        val topLevelDestinations = setOf(R.id.accountListFragment)
        appBarConfiguration = AppBarConfiguration.Builder(topLevelDestinations)
            .setDrawerLayout(drawerLayout)
            .build()
        NavigationUI.setupWithNavController(binding.navView, navController)
        NavigationUI.setupWithNavController(toolbar,navController,appBarConfiguration)
    }
    override fun onSupportNavigateUp(): Boolean {
        return NavigationUI.navigateUp(navController,appBarConfiguration)
    }
}

, и это мое меню ящика с двумя пунктами с одинаковым идентификатором с фрагментами, которые я хочу перейти:

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

    <item
        android:id="@+id/aboutFragment"
        android:icon="@drawable/question"
        android:title="About" />
    <item
        android:id="@+id/settingsFragment"
        android:icon="@drawable/settings"
        android:title="settings" />
</menu>

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Я нашел ответ, вместо того чтобы использовать следующий код для установки навигации с помощью navController: NavigationUI.setupWithNavController(binding.navView, navController) Я использовал следующий colde в основной активности:

binding.navView.setNavigationItemSelectedListener(this)
    override fun onNavigationItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {
        R.id.about_item -> navController.navigate(R.id.aboutFramgent)
        R.id.settings_item -> navController.navigate(R.id.settingsFramgent)
    }
    return true
}
0 голосов
/ 20 января 2020

используйте это

AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder (navController.getGraph ()). Build ();

вместо

appBarConfiguration = AppBarConfiguration.Builder ( topLevelDestinations)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...