当前位置: 首页 > 知识库问答 >
问题:

指定为非null的参数为null:方法kotlin。jvm。内部的内在的。检查参数完整,参数转换视图

阎卓
2023-03-14

在将适配器代码转换为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代码。

共有3个答案

步骏
2023-03-14

在getView中将你的转换视图从非空更改为空

override fun getView(position: Int, convertView: View, parent: ViewGroup): View {

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
蔡明贤
2023-03-14

使convertView为空:

convertView: View?

我不知道为什么行号是错误的,但是stacktrace告诉您在错误消息中应该查找的位置。

冯永长
2023-03-14

getView()方法是Adapter接口的一部分,是用Java定义的。这里有文档。重要的部分是关于convertView参数的注释:

视图:如果可能,要重用的旧视图。注意:在使用之前,您应该检查此视图是否为非空且具有适当的类型。

这意味着框架convertViewnull值传递给此方法是非常有效的(这意味着您需要创建一个新视图并返回该视图,而不是循环使用旧视图)。

反过来,这意味着convertView的Kotlin定义必须是View ,而不仅仅是查看。因此,将函数签名更改为:

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View

 类似资料: