Kotlin - Handling Back Button Klicken Sie in Navigation Drawer - Android

Sep 05 2020

Ich habe Navigation Drawer in Android implementiert.

Funktioniert gut.

Die onBackPressed-Methode ist ebenfalls implementiert.

Funktioniert gut.

Jetzt möchte ich die Funktionalität der onBackPressed () -Methode beim Klicken auf die Schaltfläche "Zurück" in der Navigationsleiste. (Die Schaltfläche "Zurück" befindet sich in der Navigationsleiste.)

Ich habe die Schaltfläche "Zurück" wie folgt eingestellt:

// Set back button
    mFragmentManager.addOnBackStackChangedListener(FragmentManager.OnBackStackChangedListener {
        if (mFragmentManager.backStackEntryCount > 0) {
            supportActionBar!!.setDisplayHomeAsUpEnabled(true)
        } else {
            supportActionBar!!.setDisplayHomeAsUpEnabled(false)
            mToggle.syncState()
        }
    })

Um nun auf die Schaltfläche Zurück zu klicken, habe ich die folgende Methode implementiert:

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {
        android.R.id.home-> {
            Toast.makeText(this, "Back pressed", Toast.LENGTH_SHORT)
                .show();
            onBackPressed();
        }
    }
    return super.onOptionsItemSelected(item)
}

Dieser Toast im Inneren wird jedoch nicht angezeigt, sondern öffnet nur meine Navigationsschublade.

Was könnte das Problem sein? Vielen Dank.

EDIT:

Unten ist der Code zum Öffnen der Schublade, dh wie folgt:

mToggle = ActionBarDrawerToggle(
            this,
            mDrawer,
            toolbar,
            R.string.navigation_drawer_open,
            R.string.navigation_drawer_close
        )
        mDrawer.addDrawerListener(mToggle)
        mToggle.syncState()

Setzen Sie hier einfach einen ActionBarDrawerToggle auf Navigation Drawer. Also, Schublade öffnen, wenn ich auf HumberIcon klicke.

Unten ist die onBackPressed () -Methode in meiner Aktivität:

if (mDrawer.isDrawerOpen(GravityCompat.START)) {
            mDrawer.closeDrawer(GravityCompat.START)
        } else {
            if (mFragmentManager.backStackEntryCount > 0) {
                mFragmentManager.popBackStack()
                nav_view.setCheckedItem(R.id.nav_home_fragment)
                
            } else {
                if (mFragmentManager.findFragmentById(R.id.fragment_container) is SecondFragment) {
                    mFragmentManager.popBackStack()
                    nav_view.setCheckedItem(R.id.nav_home_fragment)
                } else {
                    super.onBackPressed()
                }
            }
        }
    }

Antworten

1 umitx Sep 06 2020 at 08:32

Wenn Ihre Symbolleiste in Ordnung ist, können Sie Folgendes verwenden, um mit NavComponent eine zurückzukehren.

findNavController().popBackStack()

Wenn es ein Problem mit Ihrer Symbolleiste gibt, teilen Sie die entsprechenden Codes mit.