RecyclerView简单使用代码示例(一)

实现Adapter和ViewHolder

这两个类共同定义了数据的显示方式。
ViewHolder是列表中每个元素的View的封装容器,Adapter会根据需要创建ViewHolder,还会为这些视图设置数据局,此过程称为“绑定”。
定义Adapter,需要重写下面的三个方法。

  • onCreateViewHolder: 每当RecyclerView需要创建新的ViewHolder时,他都会调用此方法,此方法会创建并初始化ViewHolder以及其关联的View,但并不会填充数据。
  • onBindViewHolder:RecyclerView会调动此方法将ViewHolder与数据相关联。
  • getItemCount:RecyclerView会调用此方法来获取数据集的大小。
class CustomAdapter(private val dataSet: Array<String?>) :
    RecyclerView.Adapter<CustomAdapter.ViewHolder>() {
    // 创建ItemViewHolder  2021/7/5
    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val textView: TextView
        init {
            textView = view.findViewById(R.id.textView)
        }
    }

    // Create new views (invoked by the layout manager)
    override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
        // Create a new view, which defines the UI of the list item
        val view = LayoutInflater.from(viewGroup.context)
            .inflate(R.layout.text_row_item, viewGroup, false)
        return ViewHolder(view)
    }

    // Replace the contents of a view (invoked by the layout manager)
    override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
        // Get element from your dataset at this position and replace the
        // contents of the view with that element
        viewHolder.textView.text = dataSet[position]
    }

    // Return the size of your dataset (invoked by the layout manager)
    override fun getItemCount() = dataSet.size
}
复制代码

以下是ViewHolder对应的布局文件示例:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:gravity="center_vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="element_text"/>
</FrameLayout>
复制代码

以下是在Activity中的应用示例

class MainActivity : AppCompatActivity() {
    lateinit var recyclerview:RecyclerView

    protected var mRecyclerView: RecyclerView? = null
    protected var mAdapter: CustomAdapter? = null
    protected var mLayoutManager: RecyclerView.LayoutManager? = null
    lateinit var mDataset: Array<String?>

    private enum class LayoutManagerType {
        GRID_LAYOUT_MANAGER, LINEAR_LAYOUT_MANAGER
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initdataset()
        mRecyclerView = findViewById(R.id.recyclerview)
        mLayoutManager = GridLayoutManager(this,2)
        mAdapter = CustomAdapter(mDataset)
        mRecyclerView?.adapter = mAdapter
        mRecyclerView?.layoutManager = mLayoutManager
    }


    fun initdataset(){
        mDataset = arrayOfNulls(100)
        for (i in 0 until 100) {
            mDataset[i] = "This is element #$i"
        }
    }
}
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享