帮我用kotlin生成一个带搜索框的recyclerview
以下是使用Kotlin创建带搜索框的RecyclerView示例代码:
- 创建RecyclerView布局文件
在res/layout目录下创建一个名为item_layout.xml的布局文件,用于定义RecyclerView的每个列表项的样式。以下是示例代码:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:orientation="vertical">
<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textStyle="bold"/>
<TextView
android:id="@+id/tvDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="14sp"/>
</LinearLayout>
- 创建搜索框布局文件
在res/layout目录下创建一个名为search_layout.xml的布局文件,用于定义搜索框的样式。以下是示例代码:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:orientation="horizontal">
<EditText
android:id="@+id/etSearch"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:hint="Search"/>
<Button
android:id="@+id/btnSearch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Search"/>
</LinearLayout>
- 创建RecyclerView适配器
创建一个名为MyAdapter的类,继承自RecyclerView.Adapter,并实现onCreateViewHolder、onBindViewHolder和getItemCount方法。以下是示例代码:
class MyAdapter(private val itemList: ArrayList<Item>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = itemList[position]
holder.tvTitle.text = item.title
holder.tvDescription.text = item.description
}
override fun getItemCount(): Int {
return itemList.size
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val tvTitle: TextView = itemView.findViewById(R.id.tvTitle)
val tvDescription: TextView = itemView.findViewById(R.id.tvDescription)
}
}
- 创建Activity
创建一个名为MainActivity的Activity,并在布局文件中添加RecyclerView和搜索框。在MainActivity的onCreate方法中,初始化RecyclerView和搜索框,并设置搜索框的点击事件。以下是示例代码:
class MainActivity : AppCompatActivity() {
private lateinit var recyclerView: RecyclerView
private lateinit var adapter: MyAdapter
private lateinit var itemList: ArrayList<Item>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 初始化RecyclerView
recyclerView = findViewById(R.id.recyclerView)
recyclerView.layoutManager = LinearLayoutManager(this)
itemList = ArrayList()
adapter = MyAdapter(itemList)
recyclerView.adapter = adapter
// 初始化搜索框
val etSearch: EditText = findViewById(R.id.etSearch)
val btnSearch: Button = findViewById(R.id.btnSearch)
btnSearch.setOnClickListener {
val searchQuery = etSearch.text.toString()
searchItems(searchQuery)
}
// 添加默认数据项
itemList.add(Item("Item 1", "Description 1"))
itemList.add(Item("Item 2", "Description 2"))
itemList.add(Item("Item 3", "Description 3"))
itemList.add(Item("Item 4", "Description 4"))
itemList.add(Item("Item 5", "Description 5"))
adapter.notifyDataSetChanged()
}
private fun searchItems(query: String) {
val filteredList = ArrayList<Item>()
for (item in itemList) {
if (item.title.toLowerCase().contains(query.toLowerCase())) {
filteredList.add(item)
}
}
adapter.itemList = filteredList
adapter.notifyDataSetChanged()
}
data class Item(val title: String, val description: String)
}
在MainActivity的searchItems方法中,根据搜索框的内容过滤数据项,并更新RecyclerView的适配器。
- 运行应用程序
运行应用程序,可以看到具有搜索框的RecyclerView,可以通过输入搜索查询来过滤数据列表。
原文地址: https://www.cveoy.top/t/topic/bnxW 著作权归作者所有。请勿转载和采集!