Как сделать кнопку вверх go назад вместо открытия навигационного ящика - PullRequest
0 голосов
/ 03 февраля 2020

Я успешно реализовал Навигационный ящик в своем приложении, связав каждый пункт меню с фрагментом. Фрагмент назначения скрывает DrawerToggle и отображает кнопку вверх (то есть значок стрелки), но по какой-то причине, если я нажимаю на него, он открывает ящик, и я не могу go вернуться к предыдущему фрагменту. Я должен нажать кнопку назад, чтобы сделать это. Как я могу изменить это поведение? Можно ли решить эту проблему без добавления кода в каждый фрагмент?

Что я использую:

  • Компонент навигации
  • Одна операция, некоторые фрагменты
  • Панель инструментов
  • AppBarConfiguration

MainActivity

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // Setup FTUE conditional navigation
        setupNavigation()

        setupNavigationDrawer()

        appBarConfiguration =
            AppBarConfiguration(
                setOf(R.id.overviewFragment, R.id.registrationFragment,
                       R.id.registrationParamFragment), drawerLayout)
        setupActionBarWithNavController(navController, appBarConfiguration)
        findViewById<NavigationView>(R.id.nav_view)
            .setupWithNavController(navController)
    }

    /**
     * Set the toolbar, set the drawerLayout, set the drawerToggle
     */
    private fun setupNavigationDrawer() {
        toolbar = findViewById(R.id.toolbar)

        setSupportActionBar(toolbar)

        drawerLayout = (findViewById<DrawerLayout>(R.id.drawer_layout))
            .apply {
                setStatusBarBackground(R.color.colorPrimaryDark)
            }
        drawerToggle = ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open, R.string.close)
        drawerToggle.setDrawerIndicatorEnabled(true)
        drawerToggle.syncState()

        drawerLayout.addDrawerListener(drawerToggle)

    }

    override fun onPostCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        super.onPostCreate(savedInstanceState, persistentState)
        drawerToggle.syncState()
    }

    /**
     * Ensures that the drawer is closed
     * before the app switches back to the previous fragment
     */
    override fun onBackPressed() {
        if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawer(GravityCompat.START)
        } else {
            super.onBackPressed()
        }
    }
}

Полный репозиторий: Github

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Вам необходимо настроить панель инструментов с помощью контроллера навигации:

toolbar.setupWithNavController(findNavController(R.id.nav_host_fragment),findViewById(R.id.full_drawer_layout))

Подробнее об этом здесь .

0 голосов
/ 03 февраля 2020

Почему бы не использовать наследство? Создайте MonitorCardiacoActivity с этим кодом, и каждое используемое вами действие должно наследовать MonitorCardiacoActivity.

...