我想将依赖项(HomeViewModel)注入到我的片段(HomeFragment)中。
我有一个类(HomeViewModelImpl),它实现了该抽象(HomeViewModel),并且在这个类中,我当然会重写父级的方法。
抽象类(HomeViewModel )是从BaseViewModel扩展而来的抽象类。
BaseViewModel是一个普通的类,open它是从Android生命周期组件的ViewModel类扩展而来的。
HomeViewModel问题是当我想注入片段时出现错误:
> error: [Dagger/MissingBinding] [dagger.android.AndroidInjector.inject(T)] com.example.mvvm.ui.home.HomeViewModel cannot be provided without an @Provides-annotated method.
public abstract interface AppComponent extends dagger.android.AndroidInjector<com.example.mvvm.MyApplication> {
^
com.example.mvvm.ui.home.HomeViewModel is injected at
com.example.mvvm.ui.home.HomeFragment.viewModel
com.example.mvvm.ui.home.HomeFragment is injected at
dagger.android.AndroidInjector.inject(T)
Run Code Online (Sandbox Code Playgroud)
主页片段:
class HomeFragment : BaseFragment() {
//Error comes from this line
@Inject
lateinit var viewModel: HomeViewModel
}
Run Code Online (Sandbox Code Playgroud)
主页视图模型:
//If I write @Inject annotation here, …Run Code Online (Sandbox Code Playgroud) 我有三个课我遇到问题.它们被命名为:GameScene,StageScene,StageOne.我的问题是我想在StageScene中实现初始化,但仍然强制StageOne实现它,这样每当有人使用StageOne对象(stageOne.initialize())时,将为StageScene和StageOne运行初始化.任何人都知道如何做到这一点?
public abstract class GameScene
{
public abstract void initialize();
}
public abstract class StageScene extends GameScene
{
public abstract void initialize()
{
//Some code
}
}
public class StageOne extends StageScene
{
public void initialize()
{
//Some code
}
}
Run Code Online (Sandbox Code Playgroud)