Не могу изменить значок панели инструментов при использовании navhost - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь (безуспешно) изменить значок стрелки назад на панели инструментов при использовании NavHostFragment. Я использую NavController с панелью инструментов (как вы можете видеть здесь)

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    setSupportActionBar(toolbar)
    val navController = findNavController(R.id.nav_host_fragment)
    appBarConfiguration = AppBarConfiguration(navController.graph)
    setupActionBarWithNavController(navController, appBarConfiguration)
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
    toolbar.setTitleTextColor(resources.getColor(R.color.toolbarTextColor))
    navigation.setupWithNavController(Navigation.findNavController(this, R.id.nav_host_fragment))
}

Навигация работает правильно, но я не могу изменить значок возврата.

Я уже пробовал использовать собственную тему. Ни один из определенных атрибутов до сих пор не работал.

    <style name="ToolbarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">
        <item name="android:navigationIcon">@drawable/ic_keyboard_arrow_left_black_24dp</item>
        <item name="android:homeAsUpIndicator">@drawable/ic_keyboard_arrow_left_black_24dp</item>
        <item name="collapseIcon">@drawable/ic_keyboard_arrow_left_black_24dp</item>
        <item name="android:closeIcon">@drawable/ic_keyboard_arrow_left_black_24dp</item>
    </style>

Попробовал с помощью кода:

toolbar.navigationIcon = resources.getDrawable(R.drawable.ic_keyboard_arrow_left_black_24dp)
toolbar.setNavigationIcon(R.drawable.ic_keyboard_arrow_left_black_24dp)
toolbar.navigationIconResource = R.drawable.ic_keyboard_arrow_left_black_24dp

При использовании кода после создания макета появляется кнопка «Назад», но при вводе другого фрагмента значок возвращается к значку «Назад» по умолчанию.

Как я могу это изменить?

1 Ответ

0 голосов
/ 15 января 2019

Эта функция должна быть добавлена ​​в будущем, в настоящее время вы можете сделать это, реализовав OnDestinationChangedListener и изменив значок панели инструментов внутри обратного вызова (просто обязательно добавьте OnDestinationChangedListener после вашего метода установки), что-то вроде этого :

navController.addOnDestinationChangedListener { controller, destination, arguments ->
        toolbar.setNavigationIcon(R.drawable.ic_keyboard_arrow_left_black_24dp) //set it here for all the destinations, or inside the switch statement if you want to change it based on destination
        when(destination.id) {
            R.id.mainFragment -> {
              toolbar.setNavigationIcon(R.drawable.ic_keyboard_arrow_left_black_24dp)
            }
            R.id.detailsFragment -> {
              toolbar.setNavigationIcon(R.drawable.ic_keyboard_arrow_left_black_24dp)
            }
        }
    }

На основании этой проблемы:

https://issuetracker.google.com/issues/121078028

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