アダプタコードを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)
行を膨らませるとエラーが発生します:
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
どうやら、nullであってはならないいくつかのパラメータはnullであり、kotlinはそれをチェックします。問題は、新しいkotlinコードをデバッグすることさえできないことです。
getView()
メソッドはAdapter
インターフェイスの一部であり、Javaで定義されています。 ドキュメントはこちら 。重要な部分は、convertView
パラメーターに関するこの注意です。
View:可能であれば、再利用する古いビュー。注:使用する前に、このビューが非ヌルで適切なタイプであることを確認する必要があります。
つまり、フレームワークがnull
のconvertView
値をこのメソッドに渡すことは非常に有効です(つまり、古いビューをリサイクルするのではなく、新しいビューを作成して返す必要があることを意味します)。
同様に、これは、convertView
のKotlin定義は、View
だけでなく、View?
型でなければならないことを意味します。関数のシグネチャを次のように変更します。
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View
convertView
をヌル可能にします:
convertView: View?
行番号が間違っている理由はわかりませんが、スタックトレースはエラーメッセージのどこを見るべきかを教えてくれます。
GetViewのconvertViewをnull以外からnullableに変更します
override fun getView(position: Int, convertView: View, parent: ViewGroup): View {
に
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {