问题描述
是否有一种方法可以将数据从fragment
发送到另一个,而无需从其中创建新的instance
?
我inject
fragment
,但我遇到了一个问题,下面将对此进行描述:
我们inject
fragments
是这样的:
val fragmentModule= module {
factory { MyFragment() }
}
这是一个function
用来替换fragment
:
fun AppCompatActivity.replaceFragment(fragment: Class<out Fragment>,frameId: Int){
supportFragmentManager
.beginTransaction()
.replace(frameId,fragment,null,null)
.commit()
}
然后我像这样使用它:
activity.replaceFragment(MyFragment::class.java,R.id.frameLayoutId)
所以我的问题是如何以这种方式将argument
设置为fragment
,而又不创建instance
的新fragment
,我们如何传递数据?
val bundle=Bundle()
bundle.putString("YourKey","YourData")
val fragment=MyFragment()
fragment.arguments=bundle
解决方法
without create new instance?
否。依赖项注入框架仅负责在需要的地方提供依赖项,它不会以任何方式自动连接组件。
使用Koin
,您可以在创建片段时使用Bundle
传递FragmentFactory
。
val arguments = Bundle().apply {
putString("key","value")
}
supportFragmentManager.beginTransaction()
.replace(R.id.container,MyFragment::class.java,arguments)
.commit()
要在创建片段之后传递数据,请以某种方式在Fragment
中进行设置。可以有以下选项:-
- 如果您使用的是
MVVM
,则可以使用共享的ViewModel
使用LiveData
来传递数据。 - 或者,您可以从堆栈中获取
Fragment
并在其上调用方法。 - 或者您可以使用回调接口