所以,我有这个自定义的ViewModelFactory
,我正在尝试插入片段。但这不起作用,并向我显示
lateinit属性viewModelFactory尚未初始化`
这是我的ViewModelFactory
@Singleton
class ViewModelFactory @Inject constructor(private val creators: MutableMap<Class<out ViewModel?>?, Provider<ViewModel?>?>?) : ViewModelProvider.Factory {
....
}
这是我的片段
class MainFragment : Fragment() {
@Inject
lateinit var viewModelFactory: ViewModelFactory
private lateinit var viewModel: MainViewModel
private var bindings: MainFragmentBinding? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
(activity?.application as BaseApplication).getAppComponent().inject(this)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
bindings = DataBindingUtil.inflate(layoutInflater, R.layout.main_fragment, container, false)
return bindings?.root
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProvider(this, viewModelFactory).get(MainViewModel::class.java)
setupObserver()
}
}
这是我的ViewModelModule
@Module
abstract class ViewModelModule {
@Binds
@IntoMap
@ViewModelKey(MainViewModel::class)
abstract fun bindViewModel(mainViewModel: MainViewModel): ViewModel
@Binds
abstract fun bindFactory(viewModelFactory: ViewModelFactory): ViewModelProvider.Factory
}
这里是AppCompoent
@Singleton
@Component(modules = [ApiModule::class, ContextModule::class, ViewModelModule::class])
interface AppComponent {
fun inject(mainActivity: MainActivity)
fun inject(fragment: Fragment)
}
尝试更改
fun inject(fragment: Fragment)
to
fun inject(fragment: MainFragment)
在您的AppComponent中
您可以尝试使用
MainFragment : DaggerFragment()
而不是
MainFragment : Fragment()