我有以下继承链:
邮政编码片段:
class ZipCodeFragment : BaseUserOnboardingFragment(R.layout.user_onboarding_zip_code_fragment) {
// code
}
BaseUserOnboardingFragment:
abstract class BaseUserOnboardingFragment(@LayoutRes layoutRes: Int = 0) : BaseFragment(layoutRes) {
// code
}
基础片段
abstract class BaseFragment : Fragment, ErrorListener {
constructor() : super()
constructor(@LayoutRes layoutRes: Int) : super(layoutRes)
}
按照此处描述的步骤,我已将我的
ZipCodeFragment
注释如下:
@AndroidEntryPoint(BaseUserOnboardingFragment::class)
class ZipCodeFragment : Hilt_ZipCodeFragment(R.layout.user_onboarding_zip_code_fragment) {
// code
}
编译时,出现以下错误,好像 Hilt 类未正确生成:
error: [Hilt]
public final class ZipCodeFragment {
^
@AndroidEntryPoint class expected to extend Hilt_ZipCodeFragment. Found: Object
[Hilt] Processing did not complete. See error above for details.
我错过了什么?
我发现了问题:
abstract class BaseUserOnboardingFragment(@LayoutRes layoutRes: Int = 0)
有一个尚不支持的默认构造函数参数。
在 Hilt Gradle 插件支持此功能之前,您可以使用
EntryPoint
来注入片段
class ZipCodeFragment : BaseUserOnboardingFragment(R.layout.user_onboarding_zip_code_fragment) {
override fun onAttach(context: Context) {
super.onAttach(context)
EntryPointAccessors.fromActivity(
activity = context.findActivity() as Activity,
entryPoint = ZipCodeFragmentEntryPoint::class.java,
).inject(this)
}
@EntryPoint
@InstallIn(ActivityComponent::class)
internal interface ZipCodeFragmentEntryPoint {
fun inject(zipCodeFragment: ZipCodeFragment)
}
}