Android Hilt:具有抽象活动的抽象方法抛出错误
我试着用剑柄创建基本活动。但这是一个错误Android Hilt:具有抽象活动的抽象方法抛出错误,android,kotlin,dagger-2,dagger-hilt,Android,Kotlin,Dagger 2,Dagger Hilt,我试着用剑柄创建基本活动。但这是一个错误 error: [Hilt] public abstract class ActivityBase<V extends androidx.lifecycle.ViewModel, B extends androidx.viewbinding.ViewBinding> extends androidx.appcompat.app.AppCompatActivity { ^ Found unimplemented
error: [Hilt]
public abstract class ActivityBase<V extends androidx.lifecycle.ViewModel, B extends androidx.viewbinding.ViewBinding> extends androidx.appcompat.app.AppCompatActivity {
^
Found unimplemented abstract methods, [getViewBinding()], in an abstract module, com.baseproject.base.ActivityBase. Did you forget to add a Dagger binding annotation (e.g. @Binds)?
错误:[Hilt]
公共抽象类ActivityBase扩展了androidx.appcompat.app.AppCompatActivity{
^
在抽象模块com.baseproject.base.ActivityBase中找到未实现的抽象方法[getViewBinding()]。是否忘记添加匕首绑定批注(例如@Binds)?
基本活动:
@InstallIn(SingletonComponent::class)
@Module
abstract class ActivityBase<V : ViewModel, B: ViewBinding> : AppCompatActivity() {
var mViewModel: V? = null
protected var mBinding: B? = null
private fun getViewModelClass(): Class<V> {
val type = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0]
return type as Class<V>
}
abstract fun getViewBinding(): B
lateinit var navHostFragment: NavHostFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
init()
setContentView(mBinding?.root)
setUpHideKeyBoard()
}
protected open fun init() {
mBinding = getViewBinding()
mViewModel = ViewModelProvider(this).get(getViewModelClass())
}
}
@AndroidEntryPoint
class MainActivity : ActivityBase<ViewModelBase, ActivityMainBinding>() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun getViewBinding() = ActivityMainBinding.inflate(layoutInflater)
}
@InstallIn(SingletonComponent::class)
@模块
抽象类ActivityBase:AppCompatActivity(){
var mViewModel:V?=null
受保护的变量mBinding:B?=null
私有函数getViewModelClass():类{
val type=(javaClass.genericSuperclass作为ParameterizedType)。实际类型参数[0]
返回类型为类
}
抽象趣味getViewBinding():B
lateinit var navHostFragment:navHostFragment
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
init()
setContentView(mBinding?.root)
setUpHideKeyBoard()
}
受保护的open-fun init(){
mBinding=getViewBinding()
mViewModel=ViewModelProvider(this).get(getViewModelClass())
}
}
主要活动:
@InstallIn(SingletonComponent::class)
@Module
abstract class ActivityBase<V : ViewModel, B: ViewBinding> : AppCompatActivity() {
var mViewModel: V? = null
protected var mBinding: B? = null
private fun getViewModelClass(): Class<V> {
val type = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0]
return type as Class<V>
}
abstract fun getViewBinding(): B
lateinit var navHostFragment: NavHostFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
init()
setContentView(mBinding?.root)
setUpHideKeyBoard()
}
protected open fun init() {
mBinding = getViewBinding()
mViewModel = ViewModelProvider(this).get(getViewModelClass())
}
}
@AndroidEntryPoint
class MainActivity : ActivityBase<ViewModelBase, ActivityMainBinding>() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun getViewBinding() = ActivityMainBinding.inflate(layoutInflater)
}
@AndroidEntryPoint
类MainActivity:ActivityBase(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
}
重写fun getViewBinding()=ActivityMainBinding.inflate(LayoutFlater)
}
如果我同时删除@Module和@InstallIn(SingletonComponent::class)注释,它会抛出下面的错误
error: method getActivityFactory in class DefaultViewModelFactories cannot be applied to given types;
return DefaultViewModelFactories.getActivityFactory(this);
^
required: ComponentActivity,Factory
found: Hilt_MainActivity<viewBinding>
reason: actual and formal argument lists differ in length
where B is a type-variable:
B extends ViewBinding declared in class Hilt_MainActivity
错误:类DefaultViewModelFactorys中的方法getActivityFactory无法应用于给定类型;
返回DefaultViewModelFactorys.getActivityFactory(此);
^
必需:组件活动,工厂
发现:Hilt_Main活动
原因:实际参数列表和正式参数列表长度不同
其中B是类型变量:
B扩展类Hilt_MainActivity中声明的ViewBinding
为什么ActivityBase
用@Module
注释,为什么它是SingletonComponent
的一部分。你想做什么?这看起来很混乱。@ADM,我想用入口点创建我的主活动,如果我从ActivityBase中删除这两个注释,它就会抛出错误。@Mehta如@ADM所述,那些@Modulee
和@InstallIn
对您的活动的批注毫无意义。@skywall,如果我从抽象活动中删除了这两个批注,则会引发另一个错误。请参阅我更新的问题。