ArrayAdapter- Getview()导致错误

时间:2018-02-13 21:59:43

标签: android kotlin android-arrayadapter getview

我有一点我无法解决的问题。我搜索过,我尝试了很多东西,遗憾的是没有结果。 Getview导致错误

下面的一行错误是ArrayAdapter中的错误:

val tvCopiedText:TextView = view !!。findViewById(R.id.tv_copiedText)

enter image description here

以下是代码:

ArrayAdapter

class MyArrayAdapter: ArrayAdapter<CopiedText> {
constructor(context: Context, resource:Int, copiedTexts: List<CopiedText>) : super(context, resource, copiedTexts) {
}

override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
    var view: View? = null
    val copiedText:CopiedText = getItem(position)
    if (convertView == null){
        view = LayoutInflater.from(context).inflate(R.layout.item_layout, parent, false)

    }

    val tvCopiedText:TextView = view!!.findViewById<TextView>(R.id.tv_copiedText)
    val tvTime:TextView = view.findViewById<TextView>(R.id.tv_time)
    //val tvCopiedText = retView!!.findViewById<TextView>(R.id.tv_copiedText)
    //val tvCopiedText = retView!!.findViewById<TextView>(R.id.tv_copiedText)

    tvCopiedText.text = copiedText.ctText
    tvTime.text = copiedText.ctTime.toString()

    return  view
}

}

MainActivity中的适配器:

ctAdapter = MyArrayAdapter(this, R.layout.item_layout, listCopiedText)
    myListView.adapter = ctAdapter

item_layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:paddingBottom="8dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="8dp"
    >

    <TextView
        android:id="@+id/tv_copiedText"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textSize="14sp"
        tools:text="Here will be the copied Text" />

    <TextView
        android:id="@+id/tv_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        tools:text="Time"/>

2 个答案:

答案 0 :(得分:1)

您使用双感叹号运算符并获得NullpointerException,这是您必须支付的价格;-) 它用于以不安全的方式将可空类型(T?)转换为非可空类型(T)。

view!!.findViewById(R.id.tv_copiedText)

您的view为空,因此抛出异常。您应该考虑应用合理的可空性处理。几乎总是better solution而不是!!

答案 1 :(得分:1)

您获取空指针的原因是因为在view不为空的情况下,您没有将convertView变量分配给任何内容。更改此代码

var view: View? = null
    val copiedText:CopiedText = getItem(position)
    if (convertView == null){
        view = LayoutInflater.from(context).inflate(R.layout.item_layout, parent, false)

    }

var view: View? = convertView
    val copiedText:CopiedText = getItem(position)
    if (view == null){
        view = LayoutInflater.from(context).inflate(R.layout.item_layout, parent, false)

    }