Java 如何在清除searchview时刷新我的RecyclerView列表?

Java 如何在清除searchview时刷新我的RecyclerView列表?,java,android,android-recyclerview,searchview,android-cardview,Java,Android,Android Recyclerview,Searchview,Android Cardview,输入搜索查询文本后,我会在RecyclerView中过滤我的卡片项目,并将它们显示在顶部。但是,由于某种原因,当清除所有文本时,列表不会返回到原始状态。如何刷新我的RecyclerView列表?下面的代码应该会给你一个更好的想法 @Override public boolean onQueryTextChange(String newText) { final List<Number> filteredModelList = filter(numbers, n

输入搜索查询文本后,我会在
RecyclerView
中过滤我的卡片项目,并将它们显示在顶部。但是,由于某种原因,当清除所有文本时,列表不会返回到原始状态。如何刷新我的
RecyclerView
列表?下面的代码应该会给你一个更好的想法

@Override
    public boolean onQueryTextChange(String newText) {
        final List<Number> filteredModelList = filter(numbers, newText);
        Log.v("App", newText + ", " + numbers.size() + ", " + filteredModelList.size());
        adapter.animateTo(filteredModelList);
        list.scrollToPosition(0);
        adapter.notifyDataSetChanged();
        if (newText.equalsIgnoreCase("")){
            try{
                Log.e("SEARCH VIEW", "I CAN ENTER HERE"); //But the list doesn't refresh
                adapter.animateTo(numbers);
                adapter.notifyDataSetChanged();
                list.setAdapter(adapter);
                list.scrollToPosition
            } catch(Exception e){
                Log.e("Caught Exception", e.toString());
            }

        }
        return true;
    }
@覆盖
公共布尔onQueryTextChange(字符串newText){
最终列表filteredModelList=过滤器(数字,新文本);
Log.v(“App”,newText+,“+numbers.size()+”,“+filteredModelList.size());
adapter.animateTo(filteredModelList);
列表。滚动位置(0);
adapter.notifyDataSetChanged();
if(newText.equalsIgnoreCase(“”){
试一试{
Log.e(“搜索视图”,“我可以在这里输入”);//但是列表不会刷新
适配器.animateTo(数字);
adapter.notifyDataSetChanged();
list.setAdapter(适配器);
列表.滚动位置
}捕获(例外e){
Log.e(“捕获异常”,e.toString());
}
}
返回true;
}

当没有与搜索匹配的项目时,这是有问题的-然后屏幕只是空白,没有卡片,
SearchView
上的“X”按钮也不可见。当X可见时,我触摸它,列表将返回其原始状态。第二个问题是,是否有办法始终显示关闭图标(“X”)

当您对数组应用筛选器,以便数组中只有可用的搜索记录,然后清除“时间数组无值”的搜索文本时

所以,当您删除所有搜索文本时,创建一个临时数组并存储原始数组,在临时数组上应用过滤器,添加到主数组并设置为listview。在主数组中添加临时数组并设置为适配器

注意:-始终在tamp数组上应用筛选器,并将结果添加到主数组中并设置为适配器


我希望这能帮助你……

记住你有一个方法可以将数据加载到你的RecyclerView中,所以你要做的是,在IF语句中再次调用该方法,比如:当
newText
长度等于
零时,做点什么

下面是算法:。

if (newText.length() == 0){    
    //Reload the data Again , use the existing  method you have of loading data in the RecyclerView .
}

如果您有一些问题,只需在
RecyclerView
中再次发布代码加载数据,我会再次向您显示。

post
filter
animateTo
方法。我不允许发布这些方法。然而,正如在问题中一样,我正在输入条件[f(newText.equalsIgnoreCase(“”){]-我需要刷新那里的视图。如何做?因此很难提供帮助。检查您是否没有从这些方法中删除带有CallByReference的项,检查您是否使用空字符串从filter方法返回正确的数据。您需要调试它以找到问题所在为
RecyclerView
(类似于正常的
列表视图的
ArrayAdapter
),那么在将来,您不必在每次需要新的“filtering recyclerview”时反复编写此筛选代码,以便对上述答案进行编辑:“newText.length”是否应为“newText.length()”?
@Override
public boolean onQueryTextChange(String newText) {
    if(TextUtils.isEmpty(newText)){  //Show all data 
      adapter.animateTo(numbers);
      adapter.notifyDataSetChanged();
      return ;
    }
     //Do Filter
}