如何在Kotlin中按Role=Patient筛选数据并展示到RecyclerView
解决方案:筛选Role为Patient的数据并展示到RecyclerView
第一步:修复Adapter的构造函数错误
你的PatientAdapter构造函数参数类型存在错误,将List<DataItem>误写为context的类型,修正后代码如下:
class PatientAdapter : RecyclerView.Adapter<PatientAdapter.MyViewHolder>() { var patientList: List<DataItem> = listOf() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_patient, parent, false) return MyViewHolder(view) } override fun getItemCount(): Int { return patientList.size } override fun onBindViewHolder(holder: MyViewHolder, position: Int){ // 给fullname添加空安全处理,避免空指针 holder.patientName.text = patientList[position].fullname ?: "未知姓名" } @SuppressLint("NotifyDataSetChanged") fun setPatientListItems(patientList: List<DataItem>){ this.patientList = patientList notifyDataSetChanged() } class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { val patientName: TextView = itemView.findViewById(R.id.itemPatientName) } }
第二步:在API回调中筛选数据并更新RecyclerView
在onResponse的成功分支里,对返回的DataFileRecord数据进行筛选,只保留Role.name为Patient的DataItem,再将筛选结果传给Adapter:
override fun onResponse(call: Call<DataFileRecord>, response: Response<DataFileRecord>) { val dataPatient = response.body() if (response.isSuccessful && dataPatient != null) { // 筛选Role.name为Patient的数据,处理空安全,忽略大小写匹配避免出错 val filteredPatients = dataPatient.data?.filter { item -> item.role?.name.equals("Patient", ignoreCase = true) } ?: emptyList() // 调用Adapter方法更新数据 recyclerAdapter.setPatientListItems(filteredPatients) } }
第三步:Activity中初始化Adapter的注意事项
确保在Activity里正确初始化Adapter:
private lateinit var recyclerAdapter: PatientAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.your_activity_layout) patientRecyclerView.setHasFixedSize(true) linearLayoutManager = LinearLayoutManager(this) patientRecyclerView.layoutManager = linearLayoutManager // 初始化Adapter recyclerAdapter = PatientAdapter() patientRecyclerView.adapter = recyclerAdapter // 调用接口获取数据 getPatient(apiKey, apiSecret, token) }
关键说明
- 用Kotlin的
filter函数实现数据筛选,结合equals(ignoreCase = true)可忽略大小写,避免接口返回值大小写不一致导致筛选失败 - 全程处理空安全:通过
?.和?:运算符避免空指针异常,比如dataPatient.data为空时返回空列表 - 调用Adapter的
setPatientListItems方法更新数据,触发RecyclerView刷新
内容的提问来源于stack exchange,提问作者Dioo B
相关产品推荐
相关产品推荐

