I got this error just after converted the adapter code to 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)
The error fires when inflating the row:
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
Apparently, some parameter that shouldn't be null is null, and kotlin check it. Problem is i can't even debug the new kotlin code.
The getView()
method is a part of the Adapter
interface, and is defined in Java. Documentation here. The important part is this note about the convertView
parameter:
View: The old view to reuse, if possible. Note: You should check that this view is non-null and of an appropriate type before using.
This means that it's quite valid for the framework to pass null
values for convertView
to this method (meaning that you need to create a new view and return that, rather than recycling an old view).
In turn, this means that the Kotlin definition of convertView
must be of type View?
, not just View
. So change your function signature to this:
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View