You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:05:26