我正在使用Searchview来过滤Recyclerview中显示的Firebase条目。我希望在不进行搜索时回收器视图消失,这在我从搜索的项目返回到主活动之前工作正常。搜索完成后,回收器视图列表将再次可见。我希望每当不进行搜索时,它始终被隐藏。以下是相关代码:
msearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String mQuery) {
/*while (query.length() > 4) {
mRecyclerView.setVisibility(View.VISIBLE);
} */
if (!(mQuery == null || mQuery.trim().isEmpty())) {
mRecyclerView.setVisibility(View.VISIBLE);
}
else {
mRecyclerView.setVisibility(View.GONE);
}
firebaseSearch(mQuery);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
//filter as typed
firebaseSearch(newText);
return true;
}
});
return super.onCreateOptionsMenu(menu);
}
假设您有 2 个活动:A 和 B。
单击活动 A 上的项目后,转到活动 B,但这一次,活动 A 并未完全销毁。因此,输入文本和 recylcerView 的状态将保持不变。从活动 B 返回到活动 A 后,最好执行以下操作来清除搜索视图:
msearchView.setQuery("",false);
msearchView.setIconified(true);
由于 searchView 被清除,onQueryTextChange(( 将被执行。您可以在此处检查条件。
需要考虑的一些事项,我认为仅检查query != null
可能并不总是正确的。它可能是空的,也可能是理论上的空白。我个人会使用这样的东西:
if (query == null || query.trim().isEmpty()) {
// No query made
}
接下来,我可能不太明白,我相信你有用户搜索的活动 A。一旦他们搜索,你就会显示回收商视图。然后他们点击一个项目,你跳到活动B。当用户导航回 A 时,列表仍已满。如果这是正确的,你必须记住,当 B 在它上面可见时,A 不一定会被破坏。如果您使用的手机内存不足,操作系统可能会调用onDestroy
,并且必须在您导航回来时重新创建它。无论如何。。。此处的简单解决方法是在导航到 B 时隐藏回收视图。