ArrayAdapter- Getview() 导致错误
ArrayAdapter- Getview() causes an error
我有一个我无法解决的小问题。我已经搜索并尝试了很多东西,不幸的是没有结果。
Getview 导致错误
ArrayAdapter 中导致错误的行是下面这一行:
val tvCopiedText:TextView = 查看!!.findViewById(R.id.tv_copiedText)
代码如下:
数组适配器
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"/>
你使用双感叹号运算符得到一个NullpointerException
,这是你必须付出的代价;-)
它用于以不安全的方式将可空类型 (T?) 转换为不可空类型 (T)。
view!!.findViewById(R.id.tv_copiedText)
您的 view
为空,因此抛出异常。您应该考虑改为应用合理的可空性处理。 better solution 几乎总是 !!
。
你得到空指针的原因是因为你没有将 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)
}
我有一个我无法解决的小问题。我已经搜索并尝试了很多东西,不幸的是没有结果。 Getview 导致错误
ArrayAdapter 中导致错误的行是下面这一行:
val tvCopiedText:TextView = 查看!!.findViewById(R.id.tv_copiedText)
代码如下:
数组适配器
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"/>
你使用双感叹号运算符得到一个NullpointerException
,这是你必须付出的代价;-)
它用于以不安全的方式将可空类型 (T?) 转换为不可空类型 (T)。
view!!.findViewById(R.id.tv_copiedText)
您的 view
为空,因此抛出异常。您应该考虑改为应用合理的可空性处理。 better solution 几乎总是 !!
。
你得到空指针的原因是因为你没有将 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)
}