Kotlin — Обработка нажатия кнопки «Назад» в панели навигации — Android

#android #kotlin #navigation-drawer

#Android #kotlin #навигация-ящик

Вопрос:

Я реализовал навигационный ящик в Android.

Работает нормально.

Также реализован метод обратного нажатия.

Работает нормально.

Теперь я хочу, чтобы такая же функциональность метода onBackPressed () выполнялась при нажатии кнопки возврата в навигационном ящике. (Кнопка «Назад» установлена в панели навигации.)

Я установил кнопку со стрелкой назад, как показано ниже :

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

Теперь, чтобы нажать кнопку «Назад», я реализовал следующий метод :

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

Но этот тост внутри не отображается, вместо этого он просто открывает мой навигационный ящик.

В чем может быть проблема? Спасибо.

Редактировать :

Ниже приведен код для открытия ящика, т.Е. Как показано ниже :

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

Здесь просто установите ActionBarDrawerToggle в панель навигации. Итак, ящик открывается, когда я нажимаю на HumberIcon.

Ниже приведен метод onBackPressed () внутри моей активности :

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

Комментарии:

1. пожалуйста, опубликуйте код, который вы используете для открытия ящика

2. Я знаю, как вернуться назад. Я просто хочу выполнить обратную навигацию по нажатию кнопки «Назад» в левом верхнем углу навигационного ящика.

3. @Akki отредактировал вопрос. Пожалуйста, проверьте вопрос в разделе РЕДАКТИРОВАНИЯ. Спасибо.

Ответ №1:

Если ваша панель инструментов в порядке, вы можете использовать следующее, чтобы вернуться к ней с помощью NavComponent.

 findNavController().popBackStack()
  

Если с вашей панелью инструментов возникла проблема, пожалуйста, поделитесь соответствующими кодами.

Комментарии:

1. Я знаю, как вернуться назад. Я просто хочу выполнить обратную навигацию по нажатию кнопки «Назад» в левом верхнем углу навигационного ящика.

Ответ №2:

Шаг 1: В вашем XML создайте панель инструментов сверху

 <androidx.appcompat.widget.Toolbar
            android:id="@ id/myToolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingEnd="@dimen/_5sdp"
            app:popupTheme="@style/AppTheme.PopupOverlay" />
  

Шаг 2: затем привяжите верхнюю панель инструментов сверху текстом

  with(binding) {
            setContentView(root)
            setToolbar("Top Nav Bar").toString().lowercase()
            setToolbar() //<---- call this fun then (for back arrow in top left)
}

//===[ Handle your Top Left Back arrow button ]===
 fun setToolbar() {
        with(binding.appBar) {
            setSupportActionBar(myToolbar)
            supportActionBar?.setDisplayShowTitleEnabled(false)
            myToolbar.navigationIcon = drawableColor(R.drawable.ic_back,R.color.black)
            myToolbar.setNavigationOnClickListener { onBackPressed() }
            myToolbar.setTitleTextColor(Color.BLACK)
        }
    }
  

Затем обработайте свой onBackPressed() туда, куда вы хотите перенаправить.

Например:

      override fun onBackPressed() {
            super.onBackPressed()
            launchActivity<MainActivity>()
     }