J'ai eu cette erreur juste après avoir converti le code de l'adaptateur en Kotlin:
Java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter convertView
at ...MyAdapter.getView(Unknown Source:35)
at Android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.Java:220)
at Android.widget.AbsListView.obtainView(AbsListView.Java:2366)
L'erreur se déclenche lors du gonflage de la ligne:
class LegalAdapter internal constructor(private val activity: Activity, private val list: ArrayList<Item>) : BaseAdapter() {
override fun getView(position: Int, convertView: View, parent: ViewGroup): View {
val layoutInflater = activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
@SuppressLint("ViewHolder")
val row = layoutInflater.inflate(R.layout.legal_list_item, parent, false) //exception is throw here
Apparemment, certains paramètres qui ne devraient pas être nuls sont nuls, et kotlin le vérifie. Le problème est que je ne peux même pas déboguer le nouveau code kotlin.
La méthode getView()
fait partie de l'interface Adapter
et est définie en Java. Documentation ici . La partie importante est cette note sur le paramètre convertView
:
Vue : l'ancienne vue à réutiliser, si possible. Remarque: vous devez vérifier que cette vue n'est pas nulle et d'un type approprié avant de l'utiliser.
Cela signifie qu'il est tout à fait valide pour le framework de passer null
valeurs pour convertView
à cette méthode (ce qui signifie que vous devez créer une nouvelle vue et la renvoyer, plutôt que de recycler une ancienne vue).
En retour, cela signifie que la définition Kotlin de convertView
doit être de type View?
, pas seulement View
. Modifiez donc la signature de votre fonction en ceci:
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View
Rendre convertView
nullable:
convertView: View?
Je ne sais pas pourquoi le numéro de ligne est incorrect, mais le stacktrace vous indique où chercher dans le message d'erreur.
Modifiez votre convertView dans getView de non nul à nullable
override fun getView(position: Int, convertView: View, parent: ViewGroup): View {
à
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {