【发布时间】:2018-11-22 12:47:39
【问题描述】:
我在 android 开发中使用 Jetpack 导航组件(一个活动,许多片段)。
我想在OnNavigatedListener 中获取目的地的片段实例,如下所示。
有可能吗?
class MainActivity : AppCompatActivity() {
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(this, R.layout.activity_main)
navController = Navigation.findNavController(this, R.id.nav_host_fragment)
navController.addOnNavigatedListener { controller, destination ->
// Here
}
}
}
更新:场景
我想在每次导航的活动中获取片段的属性(或方法的返回值)。
例如,
val fragment = getFragmentInstanceFromDestination()
myActionBar.visible = fragment.getActionBarVisible()
【问题讨论】:
-
我不认为有这个选项。我不知道要实现什么场景,但也许您可以使用附加到您的活动的视图模型,以及在那里观察 LiveData 对象的片段,并从“NavigationListener”中根据目标 id 和您的片段更新此 livedata 对象将收到通知并可以“做某事”。
-
根据您更新的场景,您应该使用 ViewModel 和 LiveData。添加到您的视图模型 livedata 参数,例如“isToolbarVisible”,并从您的活动中观察它,从您的片段中更改它的值,并且活动将被通知。
-
您找到解决方案了吗?
标签: android android-jetpack android-architecture-navigation