Как добавить фильтр в RecyclerViewAdapter с помощью Kotlin? - PullRequest
0 голосов
/ 14 октября 2018

Я хочу добавить фильтр в этот RecyclerViewAdapter, пожалуйста, помогите в этом коде

ПРИМЕЧАНИЕ: Я ИСПОЛЬЗУЮ КЛАСС, Чтобы заполнить СПИСОК, этот класс принимает четыре параметра как ВХОДЫ (три строки и изображение(Int)).

like the following example : 

            booksList.add(Book("The Wild Robot", "A 2 Categorie Book", "Description book", R.drawable.thewildrobot))
        booksList.add(Book("Maria Semples", "Categorie Book", "Description book", R.drawable.mariasemples))

Адаптер RecyclerView

import android.content.Intent
import android.support.v7.widget.CardView
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import kotlin.collections.ArrayList


@Suppress("UNREACHABLE_CODE")
class RecyclerViewAdapter(private val mContext: List_of_Books, private val mData: MutableList<Book>) : RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder>() {
    private var mFilteredList: MutableList<Book>? = null


   init {
        mFilteredList = mData
    }
    override fun getItemCount(): Int {
        return mData.size
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {

        val view: View
        val mInflater = LayoutInflater.from(mContext)
        view = mInflater.inflate(R.layout.cardveiw_item_book, parent, false)
        return MyViewHolder(view)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {

        holder.tv_book_title.text = mData[position].getTitle()
        holder.img_book_thumbnail.setImageResource(mData[position].thumbnail)
        holder.cardView.setOnClickListener {
            val intent = Intent(mContext, Book_Activity::class.java)

            // passing data to the book activity
            intent.putExtra("Title", mData[position].getTitle())
            intent.putExtra("Description", mData[position].description)
            intent.putExtra("Thumbnail", mData[position].thumbnail)
            intent.putExtra("Category", mData[position].category)


            // start the activity
            mContext.startActivity(intent)
        }
    }

    fun setfilter(listitem: MutableList<Book>): MutableList<Book>? {
    mFilteredList!!.clear()
    /*mFilteredList = ArrayList()*/
    mFilteredList!!.addAll(listitem)
    notifyDataSetChanged()
    return mFilteredList
}


    class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        internal var tv_book_title: TextView = itemView.findViewById(R.id.book_title_id) as TextView
        internal var img_book_thumbnail: ImageView = itemView.findViewById(R.id.book_img_id) as ImageView
        internal var cardView: CardView = itemView.findViewById(R.id.cardview_id) as CardView

    }


}

Когда я пишу в EdiText, ничего не меняется, я использую этот коддля Editext:

    fun filter(pl: MutableList<Book>, query: String): MutableList<Book> {
        var query = query
        query = query.toLowerCase()
        val filteredModeList = ArrayList<Book>()
        for (model in pl) {
            val text = model.getTitle()!!.toLowerCase()
            if (text.startsWith(query) || (text.contains(query))) {
                filteredModeList.add(model)
            }
        }
        return filteredModeList
    }
    val editText = findViewById<EditText>(R.id.editText)
    editText.hint = getString(R.string.Search_here)

    editText.addTextChangedListener(object : TextWatcher {
        override fun afterTextChanged(p0: Editable?) {
           val filtermodelist = filter(booksList, p0.toString())
            myAdapter.setfilter(filtermodelist)

        }

        override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {

        }

        override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {

        }
    })

КНИЖНЫЙ КЛАСС

import com.medanis.fneclisbooks.R.attr.title
import com.medanis.fneclisbooks.R.string.category
import com.medanis.fneclisbooks.R.string.description
import java.util.ArrayList
import kotlin.reflect.KMutableProperty1
import android.R.attr.name



class Book(title: String, category: String, description: String, var thumbnail: Int) {

    private var title: String? = title
    var category: String? = category
    var description: String? = description

    fun getTitle(): String? {
        return title
    }

    fun setTitle(title: String) {
        this.title = title
    }}

Я думаю, что проблема в фильтре в адаптере, что-то не так, пожалуйстаПОМОГИ МНЕ ИСПРАВИТЬ ЕГО

Пожалуйста, помогите мне, и если вам нужна дополнительная информация, дайте мне знать в комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...