我一直在互联网上搜索如何实现一个可以过滤RecyclerView的SearchView,每个教程都展示了如何在一个活动中这样做,但是在这种情况下,我正在使用带有片段的TabLayout而我没有想法从哪里开始。
我的recyclerView只是一个标题列表(人名和用户名)
我不需要解析数据,当创建片段时,它已经具有我需要的所有属性
我已经在菜单中设置了RecyclerView
和SearchView
,但我不知道该怎么办才能过滤它
我做的最后一件事是在我的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)
}
}
提前谢谢你:)