Skip to content

Using Hilt2.48.1 version, it is not compatible with BaseViewModel #983

Open
@cl-6666

Description

The BaseActivity I use encapsulates BaseViewModel, and an error is reported during compilation. The code and error message are as follows
error message:
public abstract static class SingletonC implements AppApplication_GeneratedInjector,
^
Injection of an @HiltViewModel class is prohibited since it does not create a ViewModel instance correctly.
Access the ViewModel via the Android APIs (e.g. ViewModelProvider) instead.
Injected ViewModel: com.maxvision.myapplication.YourViewModel

  com.maxvision.myapplication.YourViewModel is injected at
      com.maxvision.myapplication.base.BaseActivity.viewModel
  com.maxvision.myapplication.MainActivity is injected at
      com.maxvision.myapplication.MainActivity_GeneratedInjector.injectMainActivity(com.maxvision.myapplication.MainActivity) [com.maxvision.myapplication.AppApplication_HiltComponents.SingletonC → com.maxvision.myapplication.AppApplication_HiltComponents.ActivityRetainedC → com.maxvision.myapplication.AppApplication_HiltComponents.ActivityC]

code show as below:
`abstract class BaseActivity <VM : BaseViewModel, DB : ViewDataBinding> : AppCompatActivity() {

@Inject
lateinit var viewModel: VM
lateinit var binding: DB

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = DataBindingUtil.setContentView(this, getLayoutResId())
    binding.lifecycleOwner = this
}

//获取布局资源id
abstract fun getLayoutResId(): Int

}`

`
@HiltViewModel
class YourViewModel @Inject constructor(
private val apiService: ApiService
) : BaseViewModel() {

}

`

`
@androidentrypoint
class MainActivity : BaseActivity<YourViewModel, ActivityMainBinding>(){

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

override fun getLayoutResId(): Int = R.layout.activity_main

}

@HiltAndroidApp
class AppApplication : Application() {

override fun onCreate() {
    super.onCreate()

}

companion object {
    private val sInstance: Application? = null
}

}
`

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions