安卓RecyclerView基本实现

一.基于ViewBinding绑定布局

(1)由于是跟着《第一行代码》进行实践,其中源码基本还是用的kotlin-android-extensions,所以直接改成ViewBinding比较方便,就暂时不用Jetpack Compose了

        不过我下载的AndroidStudio似乎默认使用Jetpack Compose,一开始还是比较困惑的,以为ViewBinding也被弃用了,其实只需要去掉相应内容,再添加layout包就行了。

        AndroidStudio默认的部分代码

(2)找到bulid.gradle去除Jetpack Compose的依赖并添加ViewBinding的依赖,记得点击syns project刷新

(3)右键ui.theme包,去除整个theme包

(4)在res包中新建layout包,在layout包中新建activity_main布局

(5)改写MainActivity文件

去除爆红与未用到文件,在onCreate()方法中添加binding,按Tab键可以快速填充并导入对应Binding类,补充后代码如下:

package com.example.fortest

import android.os.Bundle
import androidx.activity.ComponentActivity
import com.example.fortest.databinding.ActivityMainBinding

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }

(6)接下来就可以正常使用ViewBinding绑定布局了,了解用法后可以将用kotlin-android-extenison的源码发给gpt改写

二.RecyclerView的基本实现

 (1)添加依赖

implementation("androidx.recyclerview:recyclerview:1.3.2")

 (2)在布局中加入RecyclerView控件

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

 (3)准备适配器

        以《第一行代码》中的示例为例

package com.example.recycleviewtest

import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import com.example.recycleviewtest.databinding.FruitItemBinding

class FruitAdapter(private val fruitList: List<Fruit>) : RecyclerView.Adapter<FruitAdapter.ViewHolder>() {

    inner class ViewHolder(val binding: FruitItemBinding) : RecyclerView.ViewHolder(binding.root) {
        init {
            binding.root.setOnClickListener {
                val position = adapterPosition
                if (position != RecyclerView.NO_POSITION) {
                    val fruit = fruitList[position]
                    Toast.makeText(binding.root.context, "You clicked view ${fruit.name}", Toast.LENGTH_SHORT).show()
                }
            }
            binding.fruitImage.setOnClickListener {
                val position = adapterPosition
                if (position != RecyclerView.NO_POSITION) {
                    val fruit = fruitList[position]
                    Toast.makeText(binding.root.context, "You clicked image ${fruit.name}", Toast.LENGTH_SHORT).show()
                }
            }
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val binding = FruitItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return ViewHolder(binding)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val fruit = fruitList[position]
        holder.binding.fruitImage.setImageResource(fruit.imageId)
        holder.binding.fruitName.text = fruit.name
    }

    override fun getItemCount() = fruitList.size
}

 (4)使用RecyclerView,以下是在MainActivity中使用

class MainActivity : ComponentActivity() {
    private lateinit var binding: ActivityMainBinding
    private val fruitList = ArrayList<Fruit>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        initFruits() // 初始化水果数据,自行编写,这里不再展示
        val layoutManager = LinearLayoutManager(this)
        binding.recyclerView.layoutManager = layoutManager
        val adapter = FruitAdapter(fruitList)
        binding.recyclerView.adapter = adapter
    }

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值