【问题标题】:how to create new instance of a fragment which has dagger inject如何创建具有匕首注入的片段的新实例
【发布时间】:2021-08-14 18:36:43
【问题描述】:

您好,我正在使用构造函数注入将mainActivityViewModel 注入到我的片段中,我在片段中有一个伴随对象,它创建了片段的一个实例。 如何从主要活动创建实例

RetroComponent - 匕首

@Singleton
@Component(modules = [RetroModule::class])
interface RetroComponent {

    fun inject(mainActivityViewModel: MainActivityViewModel)
}

片段

class CreditScoreFragment @Inject constructor(
    private val viewModel: MainActivityViewModel
) : Fragment() {

    private fun initViewModel() {
        viewModel.getCreditReport()
    }

   companion object {
        @JvmStatic
        fun newInstance() =
            CreditScoreFragment(viewModel).apply {

            }

    }
}

活动

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setupFragment()
    }

    private fun setupFragment() {
        val fragment = CreditScoreFragment.newInstance()
        val fragmentManager: FragmentManager = supportFragmentManager
        val fragmentTransaction: FragmentTransaction = fragmentManager.beginTransaction()
        fragmentTransaction.replace(android.R.id.content, fragment)
        fragmentTransaction.commit()
    }
}

我应该如何调用 CreditScoreFragment.newInstance() 以及如何传递片段所需的MainActivityViewModel

提前致谢 回复

【问题讨论】:

    标签: android kotlin mvvm fragment dagger-2


    【解决方案1】:

    很抱歉回复晚了,但如果您仍然想知道,我还是会回答。我们无权访问 Android 组件的构造函数,因此您不能以这种方式使用它。 Dagger 提供了几种注入类型,在这里您可以找到 f.e 字段注入,这在您的情况下就像一个魅力。

    链接:https://medium.com/@alexxpasta/android-using-dagger-2-with-kotlin-part1-field-injection-58b0ba97925a

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      相关资源
      最近更新 更多