У меня есть компонент навигации в моем приложении, и я использую контроллер навигации для управления панелью инструментов. Но когда я открываю 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)
Во все остальные моменты он ведет себя корректно.