当我们对片段使用依赖注入时,将数据从片段发送到另一个

问题描述

是否有一种方法可以将数据从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中进行设置。可以有以下选项:-

  1. 如果您使用的是MVVM,则可以使用共享的ViewModel使用LiveData来传递数据。
  2. 或者,您可以从堆栈中获取Fragment并在其上调用方法。
  3. 或者您可以使用回调接口