搜索视图未显示搜索结果

如何解决搜索视图未显示搜索结果

我一直在尝试在 RecyclerView 活动中添加搜索过滤器。虽然搜索菜单在操作栏上,但它不显示搜索结果。我在下面提供了该项目的一些细节:

  1. 清单
<intent-filter>
                <action android:name="android.intent.action.SEARCH" />
 </intent-filter>`
  1. 菜单
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="@string/action_search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        app:showAsAction="always|collapseActionView" />

</menu>
  1. 活动
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu,menu);
        MenuItem searchViewItem = menu.findItem(R.id.action_search);
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView= (SearchView) searchViewItem.getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setImeOptions(EditorInfo.IME_ACTION_DONE);

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                adapter.getFilter().filter(newText);
                return false;
            }
        });

        return super.onCreateOptionsMenu(menu);````

4.适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> implements Filterable {

    Context context;
    List<ProfileModel> myOfficerslist;
    List<ProfileModel> myOfficerslistfull;

    public MyAdapter(Context context,List<ProfileModel> myOfficerslist,Activity activity) {
        this.context = context;
        this.myOfficerslist = myOfficerslist;
        this.myOfficerslistfull=new ArrayList<>(myOfficerslist);
    }

    @NonNull
    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View view = layoutInflater.inflate(R.layout.profile_layout,parent,false);

        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyAdapter.MyViewHolder holder,int position) {

        holder.textName.setText(myOfficerslistfull.get(position).getName());
        holder.textDesignation.setText(myOfficerslistfull.get(position).getDesignation());
        holder.textPosting.setText(myOfficerslistfull.get(position).getPlaceofposting());
        holder.textPhone.setText(myOfficerslistfull.get(position).getCell());
        holder.textEmail.setText(myOfficerslistfull.get(position).getEmail());
        holder.profileimage.setImageResource(myOfficerslistfull.get(position).getProfileImage());


    }

    @Override
    public int getItemCount() {
        return myOfficerslistfull.size();
    }

   @Override
    public Filter getFilter()
   {
        return myFilter;
    }
    Filter myFilter=new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            String searchText=constraint.toString().toLowerCase().trim();
            List<ProfileModel> filteredList = new ArrayList<>();

            if (searchText.length()==00 || searchText.isEmpty()){
                filteredList.addAll(myOfficerslistfull);
            }
            else
            {
                for (ProfileModel row : myOfficerslistfull) {
                    if (row.getName().toLowerCase().contains(searchText)|| (row.getDesignation().toLowerCase().contains(searchText)
                    ||(row.getPlaceofposting().toLowerCase().contains(searchText)))) {
                        filteredList.add(row);
                    }
                }

            }
            FilterResults filterResults=new FilterResults();
            filterResults.values=filteredList;
            return filterResults;
        }
        @Override
        protected void publishResults(CharSequence constraint,FilterResults results) {
            myOfficerslist.clear();
            myOfficerslist.addAll((Collection<? extends ProfileModel>) results.values);
            notifyDataSetChanged();
        }
    };

    public static class MyViewHolder extends RecyclerView.ViewHolder{
            ImageView profileimage;
            TextView textName;
            TextView textDesignation;
            TextView textPosting;
            TextView textPhone;
            TextView textEmail;

            public MyViewHolder(@NonNull View itemView) {

                super(itemView);
                profileimage = itemView.findViewById(R.id.profilepic);
                textName = itemView.findViewById(R.id.textName);
                textDesignation = itemView.findViewById(R.id.textDesignation);
                textPosting = itemView.findViewById(R.id.textPosting);
                textPhone = itemView.findViewById(R.id.textPhone);
                textEmail = itemView.findViewById(R.id.textEmail);
            }

        }
    }

解决方法

第一次发现的错误:

  • getItemCount() 中,您需要返回过滤列表的大小而不是整个列表的大小:
    @Override
    public int getItemCount() {
        return myOfficerslist.size();
    }
  • onBindViewHolder() 中从过滤列表而不是整个列表中获取数据:因此将所有出现的 myOfficerslistfull 更改为 myOfficerslist

  • 我猜这里的双 00 是一个错字,所以只添加一个 0

if (searchText.length()==0 || searchText.isEmpty()){

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-