[英]Android Kotlin RecyclerView Search Item with EditText with data from Data Class
所以我有一個 RecyclerView,其中的數據填充了來自一些數據 Class 的數據。 我想為此 recyclerview 應用搜索項 function。 回到我不使用數據類的時候,我跟着這個教程(教程是用 Java 編寫的)。
現在我正在使用數據 class,因為我從 API 端點獲取填充 recyclerview 的數據,我對如何在當前的 recyclerview 中應用搜索 ZC1C425268E68385D1AB5074C17A94F 感到非常困惑。 (如果您想知道,我使用庫 Retrofit 獲取數據。)
這是片段中的代碼片段:
RefundListFragment.kt
private fun fetchRefundListData() {
NetworkConfig().getRefundListDetailService().getRefundList().enqueue(object :
Callback<RefundListPOJODataClass> {
override fun onFailure(call: Call<RefundListPOJODataClass>, t: Throwable) {
...
...
...
}
override fun onResponse(
call: Call<RefundListPOJODataClass>,
response: Response<RefundListPOJODataClass>
) {
binding.refundProgressBar.visibility = View.GONE
binding.rvRefundList.adapter =
response.body()?.let { RefundListAdapter(it, this@RefundListFragment) }
fun filterString(text: String) {
val filteredList: List<RefundListPOJODataClass> = ArrayList()
for (item in response.body()?.data!!) {
if (item != null) {
if (item.buyerName?.toLowerCase()?.contains(text.toLowerCase())!!) {
filteredList.add(item)
}
}
}
adapter.filterList(filteredList)
}
binding.refundListSearchBar.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
filterString(s.toString())
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
}
})
}
})
}
但是它返回了一個錯誤:
未解決的參考:添加
這是recyclerview適配器:
RefundListAdapter.kt
class RefundListItemHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val refundedOrderId: TextView = itemView.refundedOrderId
private val orderDateTime: TextView = itemView.orderDateTime
private val refundedCustomerName: TextView = itemView.refundedCustomerName
fun bind(
refundHistory: RefundListPOJODataClassDataItem,
clickListener: RefundListOnItemClickListener
) {
refundedOrderId.text = refundHistory.orderId
orderDateTime.text = refundHistory.orderDate
refundedCustomerName.text = refundHistory.buyerName
itemView.setOnClickListener {
clickListener.onItemClicked(refundHistory)
}
}
}
class RefundListAdapter(
private var refundList: RefundListPOJODataClass,
private val itemClickListener: RefundListOnItemClickListener
) : RecyclerView.Adapter<RefundListItemHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RefundListItemHolder {
val v = LayoutInflater.from(parent.context)
.inflate(R.layout.refund_list_item_layout, parent, false)
return RefundListItemHolder(v)
}
override fun getItemCount(): Int {
if (refundList.data != null) {
return refundList.data!!.size
} else {
return 0
}
}
override fun onBindViewHolder(holder: RefundListItemHolder, position: Int) {
val refundHistory = refundList.data?.get(position)
if (refundHistory != null) {
holder.bind(refundHistory, itemClickListener)
}
}
fun filterList(filteredList: List<RefundListPOJODataClass>) { //This is the function I called in the fragment
refundList = filteredList.get(0)
notifyDataSetChanged()
}
}
interface RefundListOnItemClickListener {
fun onItemClicked(refundHistory: RefundListPOJODataClassDataItem)
}
這就是數據 class 的樣子
RefundListPOJODataClass.kt
data class RefundListPOJODataClass(
@field:SerializedName("data")
val data: List<RefundListPOJODataClassDataItem?>? = null,
@field:SerializedName("error")
val error: Error? = null
)
data class RefundListPOJODataClassError(
@field:SerializedName("msg")
val msg: String? = null,
@field:SerializedName("code")
val code: Int? = null,
@field:SerializedName("status")
val status: Boolean? = null
)
data class RefundListPOJODataClassDataItem(
@field:SerializedName("order_date")
val orderDate: String? = null,
@field:SerializedName("buyer_name")
val buyerName: String? = null,
@field:SerializedName("phone_number")
val phoneNumber: String? = null,
@field:SerializedName("status_refund")
val statusRefund: String? = null,
@field:SerializedName("order_id")
val orderId: String? = null,
@field:SerializedName("refund")
val refund: Int? = null,
@field:SerializedName("refund_date")
val refundDate: String? = null
)
我想通過屬性buyerName
搜索 recyclerview 項目。 我怎樣才能實現它? 我應該在我的代碼中更改什么? 如果有任何我錯過的細節,請告訴我。
您的過濾列表屬於 List 類型,它是不可變的。 將其更改為數組列表或 MutableList:
val filteredList: ArrayList<RefundListPOJODataClass> = ArrayList()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.