【发布时间】:2021-08-28 20:45:40
【问题描述】:
我使用 Koin 进行依赖注入,同时也使用 ViewModel 注入。我有 几个 Fragments 和 对应的 ViewModel。
class Fragment1 : BaseFragment(R.layout.fragment1) {
private val viewModel: Fragment1ViewModel by inject()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.testVM1()
}
}
class Fragment2 : BaseFragment(R.layout.fragment2) {
private val viewModel: Fragment2ViewModel by inject()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.testVM2()
}
}
对于所有片段,我使用 BaseFragment
class BaseFragment(@LayoutRes private val layoutId: Int) : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View = inflater.inflate(layoutId, container, false)
}
我的目标是将 ViewModel 注入 BaseFragment 并在子 Fragment 中使用该变量。
我把代码改成如下:
class BaseFragment<T: ViewModel>(@LayoutRes private val layoutId: Int) : Fragment() {
val viewModel: TypeToken<T> by inject()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View = inflater.inflate(layoutId, container, false)
}
class Fragment1 : BaseFragment<Fragment1ViewModel>(R.layout.fragment1) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.testVM1() // Unresolved reference: testVM1()
}
}
class Fragment2 : BaseFragment<Fragment2ViewModel>(R.layout.fragment2) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.testVM2() // Unresolved reference: testVM2()
}
}
但在这种情况下,我在调用子片段中的方法时收到错误 Unresolved reference: testVM1()/testVM2()。
问题:如何更改代码以使其正常工作?谢谢
【问题讨论】: