如何为RecyclerView实现SearchView(在片段中)

时间:2018-06-18 13:09:25

标签: android android-fragments android-recyclerview kotlin searchview

我一直在互联网上搜索如何实现一个可以过滤RecyclerView的SearchView,每个教程都展示了如何在一个活动中这样做,但是在这种情况下,我正在使用带有片段的TabLayout而我没有想法从哪里开始。

我的recyclerView只是一个标题列表(人名和用户名)

我不需要解析数据,当创建片段时,它已经具有我需要的所有属性

我已经在菜单中设置了RecyclerViewSearchView,但我不知道该怎么办才能过滤它

我做的最后一件事是在我的Fragment类中实现SearchView.OnQueryTextListener接口

class TabFragment(val data: List<Profile>) : Fragment(), SearchView.OnQueryTextListener {

lateinit var recyclerView: RecyclerView
lateinit var layoutManager: RecyclerView.LayoutManager

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    val rootView = inflater.inflate(R.layout.fragment_tab_item, container, false)

    val adapter = UserListAdapter(data.userList, this)

    recyclerView = rootView.find(R.id.tabItemRecyclerView)
    recyclerView.adapter = adapter
    recyclerView.setHasFixedSize(true)
    recyclerView.addItemDecoration(RecyclerViewDivider(ContextCompat.getDrawable(context!!, R.drawable.recyclerview_decoration)))
    recyclerView.layoutManager = LinearLayoutManager(activity)

    return rootView
}

override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
    super.onCreateOptionsMenu(menu, inflater)

    inflater!!.inflate(R.menu.menu, menu)

    val searchItem = menu!!.findItem(R.id.menu_search)
    val searchView = MenuItemCompat.getActionView(searchItem) as SearchView
    searchView.setOnQueryTextListener(this)
}

override fun onQueryTextSubmit(query: String?): Boolean {

    return true
}

override fun onQueryTextChange(query: String?): Boolean {

    return true
}

companion object {
    /**
     * Returns a new instance of this fragment for the given section
     * number.
     */
    fun newInstance(sectionNumber: Int, list: List<TurboProfile>): TabFragment {
        val fragment = TabFragment()
        val args = Bundle()
        args.putInt(INDEX, sectionNumber)
        fragment.arguments = args
        return fragment
    }
}
}

然后我的适配器:

class UserListAdapter(dataset: List<Profile>, private val fragment: Fragment) : RecyclerView.Adapter<UserListAdapter.ViewHolder>() {

private val data = ArrayList<Profile>()

init {
    data.clear()
    data.addAll(ArrayList(dataset))
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserListAdapter.ViewHolder {
    val v = LayoutInflater.from(parent.context).inflate(R.layout.layout_item, parent, false)
    return ViewHolder(v)
}

override fun onBindViewHolder(view: ViewHolder, i: Int) {
    view.profileUsername.text = data[i].username
    view.profileName.text = data[i].name
}


override fun getItemCount(): Int {
    return data.size
}

class ViewHolder(v: View) : RecyclerView.ViewHolder(v) {
    var profileUsername: TextView = v.findViewById(R.id.profileUsername)
    var profileName: TextView = v.findViewById(R.id.profileName)
}
}

提前谢谢你:)

0 个答案:

没有答案