如何在列表视图中使用查看器?

问题描述

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)