Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android活动在启动时如何与导航片段通信?_Android_Kotlin_Android Fragments_Android Activity_Android Architecture Navigation - Fatal编程技术网

Android活动在启动时如何与导航片段通信?

Android活动在启动时如何与导航片段通信?,android,kotlin,android-fragments,android-activity,android-architecture-navigation,Android,Kotlin,Android Fragments,Android Activity,Android Architecture Navigation,我正在构建一个功能,当你点击某个事件的通知时,它会将你带到主应用程序活动,主片段由事件列表(回收器视图)组成,它会滚动到你在通知中点击的特定事件 我遇到的问题是接收意图的活动与将事件ID传递给片段之间的通信。应该注意的是,我正在使用和视图绑定 下面是我的活动的简化版onCreate: override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding =

我正在构建一个功能,当你点击某个事件的通知时,它会将你带到主应用程序活动,主片段由事件列表(回收器视图)组成,它会滚动到你在通知中点击的特定事件

我遇到的问题是接收意图的活动与将事件ID传递给片段之间的通信。应该注意的是,我正在使用和视图绑定

下面是我的活动的简化版
onCreate

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    binding = MainActivityBinding.inflate(layoutInflater)

    setContentView(binding.root)
    setSupportActionBar(binding.toolbar)

    val navController = (supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment).navController

    appBarConfiguration = AppBarConfiguration(setOf(R.id.nav_event_list), binding.mainDrawerLayout)

    setupActionBarWithNavController(navController, appBarConfiguration)
    binding.navView.setupWithNavController(navController)
    binding.toolbar.setupWithNavController(navController, appBarConfiguration)

    when (intent?.action) {
        Action.GO_TO_EVENT.key -> {
            (supportFragmentManager.primaryNavigationFragment!!.childFragmentManager.primaryNavigationFragment as EventListFragment).scrollTo(intent.data)
        }
    }
}
但是这里的问题是
supportFragmentManager.primaryNavigationFragment
为空。这对我来说是有意义的,因为活动需要在创建和提交其片段之前创建,但我没有足够的经验来确定我可以在何处向片段的回收器视图发送此信号以滚动到特定项目

在这种情况下,最佳做法是什么?活动是否有办法将初始参数设置为片段?此逻辑是否应在onCreate之外?我应该使用共享的
视图模型吗?如何确保启动时仅发出一次滚动命令


我在考虑使用回调,在回调中,片段调用活动来检查它是否应该在准备就绪时滚动,但这感觉像是一种黑客行为。

是的,最佳实践是共享视图模型,片段可以从那里访问和读取数据。关于仅发出一次scroll命令,您可以在ViewModel中编写一个使用数据的方法(通过使用我的意思是在使用后清除变量)。