मैं नेविगेशन में नया हूं, नेविगेशन घटक में मेरा प्रारंभ गंतव्य मेरे शीर्ष गंतव्य के साथ समान नहीं है इसलिए मैंने कस्टम शीर्ष गंतव्य का उपयोग करने के लिए AppBarConfiguration का उपयोग किया, लेकिन जब मैं navController का उपयोग करके नेविगेशन व्यू सेट करना चाहता हूं 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
Amin Hosseini 20 जिंदा 2020, 19:53

2 जवाब

सबसे बढ़िया उत्तर

navigationView को navController के साथ सेट करने के लिए निम्नलिखित कोड का उपयोग करने के बजाय, मुझे उत्तर मिल गया: NavigationUI.setupWithNavController(binding.navView, navController) मैंने मुख्य गतिविधि में निम्नलिखित कोड का उपयोग किया:

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
}

3
Anbuselvan Rocky 19 मई 2020, 21:23

इसका प्रयोग करें:

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

बजाय :

appBarConfiguration = AppBarConfiguration.Builder(topLevelDestinations)
3
Anbuselvan Rocky 19 मई 2020, 18:05
तो अगर मैं कोड की इस पंक्ति को हटा दूं तो मुझे अपना शीर्ष गंतव्य कैसे जोड़ना चाहिए: appBarConfiguration = AppBarConfiguration.Builder(topLevelDestinations)
 – 
Amin Hosseini
21 जिंदा 2020, 13:59