前言
了解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()
}
}
}