问题描述
我在这里有一些使用插件 RecyclerViewMergeAdapater 的代码......然后我想在其中使用搜索功能,但它不能同时工作,只有一个适配器工作,否则适配器不工作...
这是我的代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_new_chat, menu);
MenuItem menuItem = menu.findItem(R.id.menu_item_search);
SearchView searchView = (SearchView) menuItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
if (!newText.trim().isEmpty()) {
RealmResults<User> users = RealmHelper.getInstance().searchForUser(newText, false);
mergeAdapter.containsAdapter(new UsersAdapter(users, true, NewChatActivity.this));
rvNewChat.setAdapter(mergeAdapter);
} else {
mergeAdapter.containsAdapter(new UsersAdapter(userList, true, NewChatActivity.this));
rvNewChat.setAdapter(mergeAdapter);
}
inviteAdapter.getFilter().filter(newText);
return false;
}
});
我希望搜索 2 适配器的结果正常工作...有人使用过它吗?
1楼
如果您想将搜索结果应用于您的 MergeAdapter,我将遍历您添加到 MergeAdapter 的适配器列表并过滤出符合您条件的项目。 过滤掉这些项目后,您可以将它们提交回适配器。
在下面的示例中,我将它们存储在名为internalAdapterRegistry的映射中。
private val internalAdapterRegistry = mutableMapOf<String, YourAdapter>()
假设我们正在产品列表(您的自定义数据类)中寻找匹配项:
数据类产品(var product_name: String, var product_quantity: Int)
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.your_menu, menu)
val searchItem = menu.findItem(R.id.action_search)
val searchView = searchItem?.actionView as SearchView
searchView.findViewById<AutoCompleteTextView>(R.id.search_src_text).threshold = 3
searchView.imeOptions = EditorInfo.IME_ACTION_DONE
searchView.setOnQueryTextListener(object :
SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
return false
}
override fun onQueryTextChange(newText: String): Boolean {
fun filter(text: String) {
val textSearch = text.toLowerCase()
if (textSearch.isNotEmpty()){
for (adapter in internalAdapterRegistry) {
val listOfYourItems = adapter.value.currentList
adapter.value.submitList(listOfYourItems.filter { product -> product.product_name.contains(textSearch, ignoreCase = true) })
}
}
}
filter(newText)
return false
}
})
- 如果要在从搜索栏中删除字符时使其工作,则需要将currentList存储在单独的变量中。 我没有在这里实现它。 只是想让你知道如何玩这个。