Использование `navigation.navigateUp` неправильно отображает меню бургера - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть действие, настроенное для работы с Android Jetpack's NavigationUI. Это работает хорошо, и я могу перемещаться правильно, за исключением того, что если я перемещаюсь вниз 2 раза, когда я перемещаюсь вверх один раз, на панели приложения будет отображаться бургер, даже если в backstack childFragmentManager все еще есть один фрагмент.

Пример:

Я перехожу к Alice In Animation RSS-канал (это программа для чтения RSS), затем к Love death & robots статья из корма. Затем go вернуться к списку статей. Но я еще не на вершине приложения. Здесь не должно быть меню гамбургеров.

Вот мой класс активности:

class MainActivity: AppCompatActivity() {
    private val navigation: NavController by lazy {
        Navigation.findNavController(this, R.id.main_activity_host_fragment)
    }

    private val drawerLayout by lazy {
        findViewById<DrawerLayout>(R.id.activity_main_navigation_drawer)
    }

    private val drawerToggle by lazy {
        ActionBarDrawerToggle(this, drawerLayout, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
    }

    private val appBarConfiguration by lazy {
        AppBarConfiguration(navigation.graph, drawerLayout)
    }

    private val backstackCount inline get() = main_activity_host_fragment?.childFragmentManager?.backStackEntryCount ?: 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        drawerLayout.addDrawerListener(drawerToggle)
        setupActionBarWithNavController(navigation, appBarConfiguration)
    }

    override fun onOptionsItemSelected(item: MenuItem?): Boolean {
        if(item?.itemId == android.R.id.home && backstackCount == 0) {
            val isOpened = drawerLayout.isDrawerOpen(activity_main_navigation_view)
            if(isOpened) drawerLayout.closeDrawers()
            else drawerLayout.openDrawer(activity_main_navigation_view)

            return true
        }
        return super.onOptionsItemSelected(item)
    }

    override fun onSupportNavigateUp(): Boolean {
        val result = navigation.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
        drawerToggle.syncState()
        return result
    }
}

Вот мой график навигации:

1 Ответ

1 голос
/ 12 февраля 2020

Как прокомментировал ianhanniballake, NavigationUI автоматически обрабатывает кнопку «Домой». ActionBarDrawerToggle не должен использоваться с AppBarConfiguration.

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