当我们对片段使用依赖注入时,将数据从片段发送到另一个片段
Send data from fragment to another when we use dependency injection for fragments
有没有一种方法可以将数据从 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
而无需创建 fragment
的新 instance
我们如何才能传递一个数据 ?
val bundle=Bundle()
bundle.putString("YourKey","YourData")
val fragment=MyFragment()
fragment.arguments=bundle
without create new instance?
没有。依赖注入框架只负责在需要的地方提供依赖,它不会以任何方式自动连接组件。
使用 Koin
,您可以在使用 FragmentFactory
.
创建片段期间传递 Bundle
val arguments = Bundle().apply {
putString("key", "value")
}
supportFragmentManager.beginTransaction()
.replace(R.id.container, MyFragment::class.java, arguments)
.commit()
要在片段创建后传递数据,您已经以某种方式在 Fragment
中进行了设置。可以有以下选项:-
- 如果您使用
MVVM
,您可以使用共享 ViewModel
来使用 LiveData
传递数据。
- 或者,您可以从后台堆栈中获取
Fragment
并对其调用方法。
- 或者你可以使用回调接口
有没有一种方法可以将数据从 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
而无需创建 fragment
的新 instance
我们如何才能传递一个数据 ?
val bundle=Bundle()
bundle.putString("YourKey","YourData")
val fragment=MyFragment()
fragment.arguments=bundle
without create new instance?
没有。依赖注入框架只负责在需要的地方提供依赖,它不会以任何方式自动连接组件。
使用 Koin
,您可以在使用 FragmentFactory
.
Bundle
val arguments = Bundle().apply {
putString("key", "value")
}
supportFragmentManager.beginTransaction()
.replace(R.id.container, MyFragment::class.java, arguments)
.commit()
要在片段创建后传递数据,您已经以某种方式在 Fragment
中进行了设置。可以有以下选项:-
- 如果您使用
MVVM
,您可以使用共享ViewModel
来使用LiveData
传递数据。 - 或者,您可以从后台堆栈中获取
Fragment
并对其调用方法。 - 或者你可以使用回调接口