J'utilise dans l'activité kotlin ViewPager et je veux dans Kotlin Fragment utiliser l'injection dagger. J'ai obtenu l'erreur : Dagger ne prend pas en charge l'injection dans les champs privés. Dans Java Fragment, l'injection de dagger fonctionne. Pourquoi ne puis-je pas injecter Dagger dans Kotlin Fragment ?
dans mon activité kotlin
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]
}
}
mon fragment de kotlin
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
}
}
messages gradle build
1 votes
C'est un défaut de Dagger en général - il ne peut pas accéder aux champs privés. Cela nécessiterait une réflexion et serait impossible à faire au moment de la compilation comme Dagger le préfère. Le faire au moment de l'exécution coûterait du temps de chargement pour faire des appels réfléchis. Donc, il ne le supporte pas du tout.