How do I filter cards in a RecyclerView through a SearchView (Kotlin)?

Viewed 110

I am currently working on a simple journal app where the user can make new entries, which get stored into a room database and displayed through a RecyclerView using cards. I am currently trying to implement a way to filter card entries based on the text within them using a SearchView. However, everything that I've found online seems to be entirely in Java, just filtering a list, etc, so I'm not sure how I would go about doing this. Any help would be massively appreciated!

Here is my code (without imports):

Fragment that displays entries through RecyclerView:

class HomeFragment : BaseFragment() {

    private lateinit var homeViewModel: HomeViewModel

    override fun onCreateView(
            inflater: LayoutInflater,
            container: ViewGroup?,
            savedInstanceState: Bundle?
    ): View? {
        homeViewModel =
                ViewModelProvider(this).get(HomeViewModel::class.java)

        val root = inflater.inflate(R.layout.fragment_home, container, false)
        return root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        recycler_view.setHasFixedSize(true)
        recycler_view.layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)

        launch {
            context?.let {
                var journal = JournalDatabase.getDatabase(it).JournalDao().allJournal()
                recycler_view.adapter = JournalAdapter(journal)
            }
        }

        newEntryButton.setOnClickListener {
            Navigation.findNavController(view).navigate(R.id.action_nav_home_to_nav_new_entry)
        }
    }
}

My adapter:

class JournalAdapter(val arrList: List<Journal>) :
    RecyclerView.Adapter<JournalAdapter.JournalViewHolder>() {

    class JournalViewHolder(view: View) : RecyclerView.ViewHolder(view) {

    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): JournalViewHolder {
        return JournalViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.recyclerview_entry, parent, false))
    }

    override fun onBindViewHolder(holder: JournalViewHolder, position: Int) {
        holder.itemView.rvTitle.text = arrList[position].title
        holder.itemView.rvText.text = arrList[position].journalText
        holder.itemView.rvDateTime.text = arrList[position].dateTime
    }

    override fun getItemCount(): Int {
        return arrList.size
    }
}
0 Answers
Related