Можно ли частично перейти на Android Nav Component - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь понять, возможно ли рефакторинг приложения, активность по активности, чтобы использовать новый компонент nav. Я вижу, что он поддерживает проектирование нескольких действий, но только путем создания компонента nav для каждого. Это означало бы, что усилия должны быть направлены на все приложение за один раз, что невозможно. Есть ли другой путь?

Я столкнулся с несколькими проблемами при навигации между действиями, в которых не используется компонент навигации, и такими действиями, как, например, возврат к предыдущей активности без навигации из операции навигации с использованием стрелки вверх или даже отображение стрелка вверх в домашнем фрагменте второго упражнения.

Я попытался вручную установитьDisplayHomeAsUpEnabled (true) и объявить родительское действие в Манифесте, но не только то, что это решение кажется невероятно неточным (что, если 2 различных действия могут потенциально быть родителями?), Но также вынудило меня добавить SINGLE_TOP атрибута, чтобы вернуться к предыдущему состоянию, всего кажется слишком много бинтов, которые наверняка очень скоро попадут в большее количество блоков ...

Любые предложения приветствуются. Спасибо!

1 Ответ

0 голосов
/ 15 марта 2020

Итак, примерно через 2 дня поиска и пробных действий я обнаружил, что наилучшим вариантом является настройка панели инструментов с компонентом nav, а также замена конфигурации панели приложений, использующей график навигации, на построитель по умолчанию - тот, который имеет пустой список фрагментов верхнего уровня. Это изменение, по сути, говорит компоненту nav об отсутствии фрагмента верхнего уровня, поэтому всегда отображайте стрелку вверх (по крайней мере, это мое понимание). Также необходимо добавить прослушиватель со стрелкой вверх, чтобы вставить задний стек в предыдущее действие, если мы обнаружим событие в месте назначения начала (фрагмент записи)

  • Нет необходимости вносить какие-либо манифестные изменения или устанавливать атрибуты appbarhome, которые я обнаружил, конфликтуют с поведением компонента Nav ..

Цитата

private fun setToolbar() {
    navController = findNavController(R.id.navigation_host_fragment)
    setSupportActionBar(binding.toolbar)
    binding.toolbar.setupWithNavController(
            navController,
            AppBarConfiguration.Builder().build() // Use Builder for empty top level list, up arrow display for home fragment.
    )

    binding.toolbar.setNavigationOnClickListener {
        if (navController.currentDestination?.id == navController.graph.startDestination) {
            onBackPressed()
        } else {
            navController.navigateUp()
        }
    }
}

Цитата

Надеюсь, это поможет другим, столкнувшимся с такими же трудностями, перейти на использование нового компонента 'i sh Nav !!!

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