Android 在RecyclerView的自定义Adapter中使用DataBinding

Android 在RecyclerView的自定义Adapter中使用DataBinding

前言

了解DataBinding可参考我的这篇文章
Android Kotlin学习 Jitpack 组件之DataBinding

写XML布局

dialog_normal_item_view.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable
            name="itemText"
            type="String" />
        <variable
            name="isSelected"
            type="boolean" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="35dp"
        android:gravity="center"
        android:orientation="vertical">

        <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:ellipsize="middle"
            android:gravity="center"
            android:minWidth="100dp"
            android:text="@{itemText}"
            android:textColor="@{isSelected? @color/colorPrimary : @color/text_hint_color}"
            android:textSize="@{isSelected? 80 : 50}" />
    </LinearLayout>
</layout>

写Adapter

NormalAdapter.kt

class NormalAdapter constructor(
    select: String,
    list: List<String>
) : RecyclerView.Adapter<NormalAdapter.ViewHolder>() {

    /** 选中字符串 */
    var selectStr = select
    /** 字符串数据列表 */
    var mList = list

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val inflater: LayoutInflater = LayoutInflater.from(parent.context)
        val binding : DialogNormalItemViewBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_normal_item_view, parent, false)
        return ViewHolder(binding)
    }

    override fun getItemCount(): Int = this.mList.size

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bind(this.mList[position])
        holder.binding.text.setOnClickListener {
            // 改变选中字符串
            this.selectStr = this.mList[position]
            notifyDataSetChanged()
        }
    }

    inner class ViewHolder constructor(
        val binding: DialogNormalItemViewBinding
    ) : RecyclerView.ViewHolder(binding.root) {

        fun bind(text: String) {
            binding.itemText = text
            binding.isSelected = text == selectStr
            binding.executePendingBindings()
        }
    }
}

完事

发布了103 篇原创文章 · 获赞 31 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/sinat_38184748/article/details/103262760