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)- Remplacezthisparactivity.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