1.RecyclerView列表
<androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv_list"android:layout_width="match_parent"android:layout_height="match_parent"/>
2.item布局
说明:在xml中import数据实体类DeviceData,可以直接取数据对控件进行内容填充
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"><data><import type="android.view.View"/><import type="com.example.DeviceData" alias="DeviceData"/><variablename="deviceData"type="DeviceData" /></data><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/lib_title_bg"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_item_device_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="15sp"android:layout_weight="1"android:text="@{deviceData.deviceName}"android:padding="10dp"/><TextViewandroid:id="@+id/tv_item_device_model"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="15sp"android:layout_weight="1"android:text="@{deviceData.deviceModelName}"android:padding="10dp"/></LinearLayout><Viewandroid:layout_width="match_parent"android:background="#F7F7F7"android:layout_height="15dp"/></LinearLayout>
</layout>
3.adapter适配器
说明:适配器中使用dataBinding进行数据绑定,代码简洁
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.orhanobut.logger.Logger
import com.example.R
import com.example.databinding.ItemDeviceListBinding
import com.example.DeviceDataclass DeviceListAdapter(val context: Context,var data: ArrayList<DeviceData>,val onItemClick: (Int) -> Unit,
): RecyclerView.Adapter<ViewHolder>() {lateinit var itemBinding: ItemDeviceListBindingoverride fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {itemBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.context),R.layout.item_device_list, parent, false)return ItemViewHolder(itemBinding,itemBinding.root)}override fun onBindViewHolder(holder: ViewHolder, position: Int) {(holder as ItemViewHolder).bind(data[position])holder.itemView.setOnClickListener(View.OnClickListener {onItemClick(position)})}override fun getItemCount(): Int {return data.size}fun refreshList(list: ArrayList<DeviceData>, choose: Int){if (choose==0){data.clear()}data.addAll(list)notifyDataSetChanged()}class ItemViewHolder(val itemBind: ItemDeviceListBinding,view: View): RecyclerView.ViewHolder(view){fun bind(bean: DeviceData){itemBind.deviceData = bean}}
}
4.分隔线
import android.graphics.Rect
import android.view.View
import androidx.recyclerview.widget.RecyclerView
//分隔线
class GridSpacingItemDecoration(private val spanCount: Int,private val spacing: Int,private val includeEdge: Boolean
) : RecyclerView.ItemDecoration() {override fun getItemOffsets(outRect: Rect,view: View,parent: RecyclerView,state: RecyclerView.State) {val position = parent.getChildAdapterPosition(view)val column = position % spanCountif (includeEdge) {outRect.left = spacing - column * spacing / spanCountoutRect.right = (column + 1) * spacing / spanCountif (position < spanCount) {outRect.top = spacing}outRect.bottom = spacing} else {outRect.left = column * spacing / spanCountoutRect.right = spacing - (column + 1) * spacing / spanCountif (position >= spanCount) {outRect.top = spacing}}}
}
5.使用
var adapter = DeviceListAdapter(requireContext(),dataList){println("点击事件")
}
val rv_list: RecyclerView = findViewById(R.id.rv_list)
rv_list.layoutManager = GridLayoutManager(context, 2)//数据两列显示
rv_list.addItemDecoration(GridSpacingItemDecoration(2, 10, true))//数据间分隔线
rv_list.adapter = adapter