Вызывается OnDestinationChanged, но панель инструментов не изменяется - PullRequest
0 голосов
/ 20 июня 2020

У меня есть компонент навигации в моем приложении, и я использую контроллер навигации для управления панелью инструментов. Но когда я открываю DialogFragment, ожидая намерения из моего уведомления:

val senderData = task.result!!
val senderNickname = senderData["nickname"] as String
val senderAvatar = senderData["avatar"] as String
val b = Bundle()
b.putString("friend_id", sender_id)
b.putString("nickname", senderNickname)
b.putString("avatar", senderAvatar)
val pendingIntent = NavDeepLinkBuilder(applicationContext)
    .setComponentName(NavigationActivity::class.java)
    .setGraph(R.navigation.mobile_navigation)
    .setDestination(R.id.nav_dialog)
    .setArguments(b)
    .createPendingIntent() 

, моя панель инструментов настраивается для запуска фрагмента DialoguesFragment при открытии DialogFragment:

navController.addOnDestinationChangedListener { controller, destination, arguments ->
    Log.i("navController", "called " + destination.label)
    when(destination.id) {
        R.id.nav_dialogues -> {
            bar!!.setTitle(R.string.menu_dialogues)
            bar.subtitle = ""
            bar.setLogo(null)
        }
        R.id.nav_dialog -> {
            Log.i("navController", "arg " + arguments?.get("nickname"))
            Log.i("navController", "arg " + arguments?.get("avatar"))
            bar!!.setTitle(R.string.menu_dialog)
            val title = arguments!!["nickname"] as String
            val avatar = arguments["avatar"] as String
            toolbar!!.title = title
            toolbar.subtitle = resources.getString(R.string.offline)
            val url = Uri.parse(avatar)
            if (url != null) {
                val bitmap = com.squareup.picasso.LruCache(applicationContext)[avatar]
                if (bitmap != null) {
                    toolbar.setLogo(BitmapDrawable(bitmap))
                } else {
                    Picasso.get().load(url).into(object : com.squareup.picasso.Target {
                        override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {
                            com.squareup.picasso.LruCache(applicationContext!!).set(avatar, bitmap!!)
                            toolbar.setLogo(BitmapDrawable(bitmap))
                        }

                        override fun onPrepareLoad(placeHolderDrawable: Drawable?) {}

                        override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) {
                            Log.i("nav_dialog", "Загрузка изображения не удалась " + url + "\n" + e?.message)
                        }
                    })
                }
            } else {
                Log.i("nav_dialog", "avatar wasn't received")
            }
        }
        ...
    }
}

EDIT : Код настройки панели инструментов в NavigationActivity:

val toolbar: Toolbar? = findViewById(R.id.mytoolbar)
setSupportActionBar(toolbar)
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
val navView: NavigationView = findViewById(R.id.nav_view)
val navController = findNavController(R.id.nav_host_fragment)
appBarConfiguration = AppBarConfiguration(
   setOf(
       R.id.nav_dialogues, R.id.nav_friends, R.id.nav_settings
   ), drawerLayout
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
navView.getHeaderView(0)

Во все остальные моменты он ведет себя корректно.

...