问题描述
ViewHolder 似乎对访问列表视图上的每个视图非常有帮助。我发现了一些代码示例,其中适配器列表视图中有一个视图(在 getview 函数中使用)。
但是当我试图在那个函数中实现一个viewHolder时,Android Studio想要导入一个recyclerview类(viewHolder)所以我认为这不正常。
我尝试将 val viewHolder = RecyclerView.ViewHolder(convertView)
放入适配器的 getview 函数中。然后我得到了 import androidx.recyclerview.widget.RecyclerView ...
我现在想做的事情有可能吗?
这是我在网上找到的示例代码,但我无法做同样的事情:
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
class MyCustomAdapter(context: Context,val items: List<String>) : BaseAdapter() {
private val layoutInflater = LayoutInflater.from(context)
override fun getCount(): Int {
return items.size
}
override fun getView(position: Int,view: View?,viewGroup: ViewGroup?): View? {
val viewHolder: ViewHolder
val rowView: View?
if (view == null) {
rowView = layoutInflater.inflate(R.layout.list_item,viewGroup,false)
viewHolder = ViewHolder(rowView)
rowView.tag = viewHolder
} else {
rowView = view
viewHolder = rowView.tag as ViewHolder
}
viewHolder.itemName.text = items[position]
return rowView
}
override fun getItem(position: Int): Any {
return 0
}
override fun getItemId(position: Int): Long {
return 0
}
private class ViewHolder(view: View?) {
val itemName = view?.findViewById(R.id.list_item_text_view) as TextView
}
}
解决方法
我从您阅读问题的第一个建议是,您可能应该使用 RecyclerView 而不是 ListView。效率更高,更“正确”。
示例代码显示了一个仅用于该列表的私有 ViewHolder,这意味着它使用相同的 ViewHolder 范例而不是 Recycler.ViewHolder 类。
为了模仿示例代码,您需要创建自己的私有 ViewHolder 类,而不是实例化为 RecyclerView 制作的类(不是 listView)