J'ai décidé de créer une vue de liste personnalisée dans mon fragment, mais j'obtiens une erreur:
FragmentOne.kt: (41, 53): Incompatibilité de type: le type inféré est FragmentOne mais une activité était attendue.
Code ci-dessous. p>
p> > > > p> p> p> p> p> p> p> p>
class MyListAdapterInFragment(private val context: Activity, private val title: Array<String>, private val date: Array<String>, private val imgid: Array<Int>)
: ArrayAdapter<String>(context, R.layout.list_iteminfragment, title) {
override fun getView(position: Int, view: View?, parent: ViewGroup): View {
val inflater = context.layoutInflater
val rowView = inflater.inflate(R.layout.list_iteminfragment, null, true)
val titleText = rowView.findViewById(R.id.title) as TextView
val imageView = rowView.findViewById(R.id.imageViewInFragment) as ImageView
val subtitleText = rowView.findViewById(R.id.date) as TextView
titleText.text = title[position]
imageView.setImageResource(imgid[position])
subtitleText.text = date[position]
return rowView
}
}
3 Réponses :
Modifiez ceci:
val myListAdapter = MyListAdapterInFragment (this, name, date, imgId)
À ceci:
val myListAdapter = MyListAdapterInFragment (activité, nom, date, imgId)
Utilisez view.context
au lieu de this
val myListAdapter = MyListAdapterInFragment(view.context,name,date,imgId)
La classe de fragment n'étend pas la classe de contexte dans sa hiérarchie. Par conséquent, nous ne pouvons pas la passer à la place de contexte .
Cependant, vous pouvez apporter du contexte à l'intérieur du fragment de deux manières.
Utilisation de l ' activité parent sur laquelle le fragment est gonflé: en tapant activité
à l'endroit où contexte code> est nécessaire.
-> Dans votre cas:
val myListAdapter = MyListAdapterInFragment (activité, nom, date, imgId)
Utilisation du contexte de la variable inflater
que nous recevons dans la méthode onCreateView ()
: en tapant inflater. contexte
-> Dans votre cas:
Créez une propriété val mContext: Context
.
attribuez-lui la valeur mContext = inflater.context
dans la méthode onCreateView ().
Ensuite, utilisez-le dans votre objet adaptateur comme
val myListAdapter = MyListAdapterInFragment (mContext, nom, date, imgId)
MyListAdapterInFragment (this, name, date, imgId)
- Remplacezthis
paractivity
.Je ne sais pas pourquoi mais votre code devrait afficher l'erreur
MyListAdapterInFragment (this, name, date, imgId)
ici lorsque vous passez un contexte de fragment où le contexte d'activité est requis