未在 Searchview 中显示正确的 Listview 项目

Posted

技术标签:

【中文标题】未在 Searchview 中显示正确的 Listview 项目【英文标题】:Not showing the correct Listview Item in Searchview 【发布时间】:2021-06-26 09:08:21 【问题描述】:
 <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_
        android:layout_
        tools:context=".MainActivity">
    
        <ListView
            android:layout_
            android:layout_
            android:id="@+id/listView"
            android:divider="#ad5"
            android:dividerHeight="2dp"
            android:layout_below="@+id/searchView"/>
        <SearchView
            android:id="@+id/searchView"
            android:layout_
            android:layout_
            android:queryHint="Search Here"
            android:iconifiedByDefault="false"
            android:layout_alignParentTop="true"/>
    
    </RelativeLayout>
        
      

这是我的搜索视图的 XML 文件。它包含搜索视图和列表视图

public class MainActivity extends AppCompatActivity 
            SearchView searchView;
            ListView listView;
            ArrayList list;
            ArrayAdapter adapter;
            @Override
            protected void onCreate(Bundle savedInstanceState) 
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                searchView = findViewById(R.id.searchView);
                listView = findViewById(R.id.listView);
                list = new ArrayList<>();
                list.add("Apple");
                list.add("Banana");
                list.add("Pineapple");
                list.add("Orange");
                list.add("Mango");
                list.add("Grapes");
                list.add("Lemon");
                list.add("Melon");
                list.add("Watermelon");
                list.add("Papaya");
                adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,list);
                listView.setAdapter(adapter);
                searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() 
                    @Override
                    public boolean onQueryTextSubmit(String query) 
            adapter.getFilter().filter(query.trim(), new Filter.FilterListener() 
                @Override
                public void onFilterComplete(int count) 
                    if(count==0)
                        Toast.makeText(MainActivity.this, "No Match found",Toast.LENGTH_LONG).show();
                    
                
            );
        return false;
    
                    @Override
                    public boolean onQueryTextChange(String newText) 
                        adapter.getFilter().filter(newText);
                      //Toast.makeText(getApplicationContext(),newText,Toast.LENGTH_SHORT).show();
                        return false;
        
                                
                );
                listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
                        Toast.makeText(MainActivity.this,list.get(position)+"",Toast.LENGTH_SHORT).show();
                    
                );
            
        
        
   

这是我的搜索视图的类,但问题是如果我直接在列表视图中选择橙色,它会烤橙色,依此类推。但是当我搜索橙色时,如果我给出“o”,它会在列表视图中显示橙色但是当我点击橙色时,它会烤苹果。为什么会发生这种情况如何解决问题..提前谢谢

【问题讨论】:

去掉if(list.contains(query))让它代表查询过滤数组列表。 能否给出完整代码 【参考方案1】:

您只需过滤结果并验证 item count 的新大小。 您可以使用过滤器变体来侦听列表大小,如果它为 0,那么您可以这样做错误消息。

public boolean onQueryTextSubmit(String query) 
        adapter.getFilter().filter(query.trim(), new Filter.FilterListener() 
            @Override
            public void onFilterComplete(int count) 
                if(count==0)
                    Toast.makeText(MainActivity.this, "No Match found",Toast.LENGTH_LONG).show();
                
            
        );
    return false;

【讨论】:

以上是关于未在 Searchview 中显示正确的 Listview 项目的主要内容,如果未能解决你的问题,请参考以下文章

AndroidX 迁移后,ListView 未在 OnCreate/OnStart 上显示任何数据

RecycleView List with SearchView is empty after back press

SearchView 过滤和设置建议

jquery 事件按钮显示正确的响应,但视图未在 django 中正确呈现

自定义安装字体未在 UILabel 中正确显示

自定义安装的字体未在 UILabel 中正确显示