android - 如果未进行搜索,则隐藏 recyclerview
android - hide recyclerview if search is not made
我正在使用 Searchview 过滤显示在 Recyclerview 中的 firebase 条目。我希望在未进行搜索时 Recyclerview 消失,这在我从搜索到的项目返回到主要 activity 之前工作正常。搜索完成后,recyclerview 列表再次可见。我希望在不进行搜索时始终隐藏它。这是相关代码:
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);
}
有几点需要考虑,我认为仅检查 query != null
可能并不总是正确的。它可能是空的或理论上是空白的。我个人会使用类似的东西:
if (query == null || query.trim().isEmpty()) {
// No query made
}
接下来,可能是我没看懂,相信你有Activity一个用户搜索的地方。一旦他们搜索,您就会显示回收者视图。然后他们单击一个项目,然后您跳转到 Activity B。当用户导航回 A 时,列表仍然是满的。如果这是正确的,您必须记住,当 B 在其上可见时,A 不一定被破坏。如果您所在的 phone 内存不足,则 OS 可能会调用 onDestroy
并且在您返回时必须重新创建它。无论如何...这里的一个简单解决方法是在导航到 B 时隐藏 RecycleView。
假设您有 2 个活动:A 和 B。
点击activityA上的item后,会去activityB,但是这次activity A并没有完全销毁。因此输入文本和 recylcerView 的状态将保持不变。从 activity B 返回到 activity A 后,您最好执行以下操作以清除搜索视图:
msearchView.setQuery("",false);
msearchView.setIconified(true);
由于清除了searchView,因此会执行onQueryTextChange()。你可以在这里查看条件。
我正在使用 Searchview 过滤显示在 Recyclerview 中的 firebase 条目。我希望在未进行搜索时 Recyclerview 消失,这在我从搜索到的项目返回到主要 activity 之前工作正常。搜索完成后,recyclerview 列表再次可见。我希望在不进行搜索时始终隐藏它。这是相关代码:
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);
}
有几点需要考虑,我认为仅检查 query != null
可能并不总是正确的。它可能是空的或理论上是空白的。我个人会使用类似的东西:
if (query == null || query.trim().isEmpty()) {
// No query made
}
接下来,可能是我没看懂,相信你有Activity一个用户搜索的地方。一旦他们搜索,您就会显示回收者视图。然后他们单击一个项目,然后您跳转到 Activity B。当用户导航回 A 时,列表仍然是满的。如果这是正确的,您必须记住,当 B 在其上可见时,A 不一定被破坏。如果您所在的 phone 内存不足,则 OS 可能会调用 onDestroy
并且在您返回时必须重新创建它。无论如何...这里的一个简单解决方法是在导航到 B 时隐藏 RecycleView。
假设您有 2 个活动:A 和 B。
点击activityA上的item后,会去activityB,但是这次activity A并没有完全销毁。因此输入文本和 recylcerView 的状态将保持不变。从 activity B 返回到 activity A 后,您最好执行以下操作以清除搜索视图:
msearchView.setQuery("",false);
msearchView.setIconified(true);
由于清除了searchView,因此会执行onQueryTextChange()。你可以在这里查看条件。