首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android RecyclerView组件的使用

Android RecyclerView组件的使用

原创
作者头像
泰坦HW
修改2021-09-08 11:00:57
3.8K0
修改2021-09-08 11:00:57
举报
文章被收录于专栏:Titan笔记Titan笔记

官方介绍

RecyclerView是ListView的一个更高级、更灵活的版本。RecyclerView组件是为大量的视图组件提供的一种容器,使得它们可以有效的在其中循环和滚动。 RecyclerView is a more advanced and flexible version of ListView. This widget is a container for large sets of views that can be recycled and scrolled very efficiently. Use the RecyclerView widget when you have lists with elements that change dynamically.

RecyclerView的使用

最终要达到的效果

如下图所示

编写相关的布局文件

MainItem布局如下:

<?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="120dp"
    android:orientation="vertical">
    <ImageView
        android:id="@+id/itemIcon"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_gravity="center"
        android:layout_weight="0.7"
        tools:ignore="ContentDescription"
        tools:srcCompat="@tools:sample/avatars" />
    <TextView
        android:textSize="20sp"
        android:id="@+id/itemName"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.3"
        android:gravity="center" />
</LinearLayout>

实现继承自RecyclerView.Adapter的Adapter类

class MainItemAdapter(private val itemList: List<MainItem>) :
    RecyclerView.Adapter<MainItemAdapter.ViewHolder>() {
    inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val itemName: TextView = view.findViewById(R.id.itemName)
        val itemIcon: ImageView = view.findViewById(R.id.itemIcon)
    }
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val ctx = parent.context
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.main_item, parent, false)
        return ViewHolder(view).apply {
            itemView.setOnClickListener {
                val position = this.adapterPosition
                val mainItem = itemList[position]
                when (mainItem.id) {
                    1 -> {
                        ctx.startActivity(Intent(ctx, SenderActivity::class.java))
                    }
                }
            }
        }
    }
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val mainItem = itemList[position]
        holder.itemName.text = mainItem.name
        holder.itemIcon.setImageResource(mainItem.iconId)
    }
    override fun getItemCount(): Int = itemList.size
}

在Activity中初始化数据和RecyclerView

private val itemList = ArrayList<MainItem>()
private fun initItems() {
    repeat(20) {
        itemList.addAll(
            listOf(
                MainItem(1, "Activity演示", R.drawable.activity_icon)
            )
        )
    }
}
private fun initRecyclerView() {
    val recyclerView = findViewById<RecyclerView>(R.id.recycler_view)
    recyclerView.layoutManager = GridLayoutManager(this, 3)
    recyclerView.adapter = MainItemAdapter(itemList)
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 官方介绍
  • RecyclerView的使用
  • 最终要达到的效果
    • 编写相关的布局文件
      • 实现继承自RecyclerView.Adapter的Adapter类
        • 在Activity中初始化数据和RecyclerView
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档