android - 对 RecyclerView 的项目进行排序 - Kotlin 代码
问题描述
我有一个数据类,其中包含一个名为“prio”的成员(下面的示例)。这个“prio”应该创建recyclerView如何显示项目的顺序->“prio”数字1应该显示在rv顶部,数字2显示在数字1下方,依此类推。
附加信息:但用户可以决定项目应该有哪个数字(优先)。所以“prio”不是固定的。
数据类
data class TaskModel(
val id: Int,
val task: String,
var prio: Int
)
问题:您能否帮我创建一个函数来对“prio”进行排序并在 recyclerView 中初始化此函数,因为 recyclerView 显示项目的顺序是?
附件:
适配器:
open class TaskAdapter (private val context: Context, private val list: ArrayList<TaskModel>)
: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val mTaskDetails : TaskModel? = null
private var onClickListener: OnClickListener? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return MyViewHolder(
LayoutInflater.from(context).inflate(R.layout.activity_item_adapter, parent, false)
)
}
override fun getItemCount(): Int {
return list.size
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val model = list[position]
if (holder is MyViewHolder) {
holder.itemView.tv_task_name.text = model.task
if(model.prio == 1){
holder.itemView.tv_priority.setBackgroundColor(Color.parseColor("#DF0101"))
}else if (model.prio == 2){
holder.itemView.tv_priority.setBackgroundColor(Color.parseColor("#FFFF00"))
}else if (model.prio == 3){
holder.itemView.tv_priority.setBackgroundColor(Color.parseColor("#31B404"))
}
//holder.itemView.tv_priority.text = model.prio
holder.itemView.setOnClickListener{
if(onClickListener != null){
onClickListener!!.onClick(position,model)
}
}
}
}
private class MyViewHolder(view: View) : RecyclerView.ViewHolder(view)
//RecyclerView Klickbar machen
interface OnClickListener {
fun onClick(position: Int, model: TaskModel)
}
主要活动
private fun setupTaskRecyclerView(tasklist: ArrayList<TaskModel>){
rv_task_view.layoutManager = LinearLayoutManager(this)
rv_task_view.setHasFixedSize(true)
val taskAdapter = TaskAdapter(this, tasklist)
rv_task_view.adapter = taskAdapter
}
解决方案
您可以sort
在array
传递之前adapter
如下:
tasklist.sortBy { it.prio }
您的代码将更改如下:
private fun setupTaskRecyclerView(tasklist: ArrayList<TaskModel>){
rv_task_view.layoutManager = LinearLayoutManager(this)
rv_task_view.setHasFixedSize(true)
tasklist.sortBy { it.prio }
val taskAdapter = TaskAdapter(this, tasklist)
rv_task_view.adapter = taskAdapter
}
推荐阅读
- java - 反转屏幕,包括 null 和空字符串
- java - 使用自定义容器作为数据库与 TestContainer
- c++ - qtconcurrent 没有用于调用“运行”的匹配函数
- html - 为什么使用 grid-template-areas 与同一类的网格区域但不同的选择器以相反的顺序显示?
- r - 调整条形图 y 轴,以便可以很好地绘制更高的 y 值
- amazon-web-services - AWS MSK 引导服务器名称是否与公共 DNS 服务器解析
- python - 如何读取 .txt 文件,并在特定位置/索引后添加空格,为 python 中的每一行
- jenkins - Jenkins 负载统计图 - 缺少主执行器
- javascript - 如何使用jquery计算小计和总计并显示结果
- azure - 了解 Azure 容器注册表中的映像数量