簡體   English   中英

Android Kotlin RecyclerView Search Item with EditText with data from Data Class

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM