我在 kotlin Activity ViewPager 中使用,我希望在 Kotlin Fragment 中使用 Dagger 注入(inject)。我有错误:Dagger 不支持注入(inject)私有(private)字段。 在 Java Fragment 中, Dagger 注入(inject)工作。 为什么我不能在 kotlin faragment 中注入(inject) dagger ?
在我的 kotlin Activity 中
mPagerAdapter = object : FragmentPagerAdapter(supportFragmentManager) {
private val mFragments = arrayOf(KotlinFragment(), JavaFragment())
private val mFragmentNames = arrayOf(getString(R.string.cashdocuments), getString(R.string.action_absmysql))
override fun getItem(position: Int): Fragment {
return mFragments[position]
}
override fun getCount(): Int {
return mFragments.size
}
override fun getPageTitle(position: Int): CharSequence {
return mFragmentNames[position]
}
}
我的 kotlin fragment
class KotlinFragment : Fragment() {
@Inject
internal var mSharedPreferences: SharedPreferences? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
(activity.application as SamfantozziApp).dgaeacomponent().inject(this)
}
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
val rootView = inflater!!.inflate(R.layout.activity_absserver, container, false)
return rootView
}
}
消息 gradle build
最佳答案
你错了:
@Inject
internal var mSharedPreferences: SharedPreferences? = null
这看起来像您将 @Inject
注释添加到 KotlinFragment
类
请将其更改为这个,它会工作:
var mSharedPreferences: SharedPreferences? = null
@Inject set
这里是文档的链接:https://kotlinlang.org/docs/reference/annotations.html
关于android - Kotlin 错误 : Dagger does not support injection into private fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47187657/