Android:在操作栏上添加 searchView

2023-12-05

我的完整项目如下:有一个listView连接到数据库和带建议的搜索选项。我想将此搜索栏移至操作栏并格式化它就像Google Play 商店搜索栏。请帮助我,我的完整代码是:

MainActivity.java

package com.GurbaniAndSikh.MahaanKosh;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

/*
 * Created by GurbaniAndSikh
 */

public class DictionaryMainActivity extends AppCompatActivity {

    private static RecyclerView.Adapter adapter;
    private RecyclerView.LayoutManager layoutManager;
    private static RecyclerView recyclerView;
    public static ArrayList<DictObjectModel> data;
    DatabaseHelper db ;
    ArrayList<String> wordcombimelist;
    ArrayList<String> meancombimelist;
    LinkedHashMap<String,String> namelist;
    SearchView searchView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
        recyclerView.setHasFixedSize(true);
        db= new DatabaseHelper(this);
        searchView = (SearchView) findViewById(R.id.searchView);
        searchView.setQueryHint("Search Here");
        searchView.setQueryRefinementEnabled(true);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        data = new ArrayList<DictObjectModel>();
        fetchData();


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

            @Override
            public boolean onQueryTextChange(String newText) {


                newText = newText.toLowerCase();

                final ArrayList<DictObjectModel> filteredList = new ArrayList<DictObjectModel>();

                for (int i = 0; i < wordcombimelist.size(); i++) {

                    final String text = wordcombimelist.get(i).toLowerCase();
                    if (text.contains(newText)) {

                        filteredList.add(new DictObjectModel(wordcombimelist.get(i),meancombimelist.get(i)));
                    }
                }
                adapter = new CustomAdapter(filteredList);
                recyclerView.setAdapter(adapter);


                return true;
            }
        });


    }
    public void fetchData()
    {
        db =new DatabaseHelper(this);
        try {

            db.createDataBase();
            db.openDataBase();

        }
        catch (Exception e)
        {
            e.printStackTrace();
        }


        namelist=new LinkedHashMap<>();
        int ii;
        SQLiteDatabase sd = db.getReadableDatabase();
        Cursor cursor = sd.query("Dictionary1" ,null, null, null, null, null, null);
        ii=cursor.getColumnIndex("word");
        wordcombimelist=new ArrayList<String>();
        meancombimelist= new ArrayList<String>();
        while (cursor.moveToNext()){
            namelist.put(cursor.getString(ii), cursor.getString(cursor.getColumnIndex("definition")));
        }
        Iterator entries = namelist.entrySet().iterator();
        while (entries.hasNext()) {
            Map.Entry thisEntry = (Map.Entry) entries.next();
            wordcombimelist.add(String.valueOf(thisEntry.getKey()));
            meancombimelist.add("- "+String.valueOf(thisEntry.getValue()));
        }

        for (int i = 0; i < wordcombimelist.size(); i++) {
          data.add(new DictObjectModel(wordcombimelist.get(i), meancombimelist.get(i)));
          }
        adapter = new CustomAdapter(data);
        recyclerView.setAdapter(adapter);
    }
}

我使用这些代码将 searchView 添加到操作栏,但 getfilter() 不起作用。

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_search, menu);
        MenuItem item = menu.findItem(R.id.menuSearch);
        SearchView searchView = (SearchView)item.getActionView();

        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);
    }

请告诉我如何实现我的目标请帮助我


在选项菜单中创建搜索视图,然后通过覆盖来使用它onCreateOptionsMenu()以编程方式。

<menu 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"
    tools:context=".MainActivity">
    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="always"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:title="Search"/>
</menu>

后来在活动课上,

@Override
    public boolean onCreateOptionsMenu( Menu menu) {
        getMenuInflater().inflate( R.menu.menu_main, menu);

        MenuItem myActionMenuItem = menu.findItem( R.id.action_search);
        final SearchView searchView = (SearchView) myActionMenuItem.getActionView();
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                if (TextUtils.isEmpty(newText)) {
                    adapter.filter("");
                    listView.clearTextFilter();
                } else {
                    adapter.filter(newText);
                }
                return true;
            }
        });

        return true;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:在操作栏上添加 searchView 的相关文章

随机推荐

  • JavaScript 判断动态命名函数是否存在

    我如何检查是否动态地命名对象或函数存在吗 在示例中 var str test var obj str Page str function Page test if typeof obj str function alert ok else
  • 可以为本机 iOS 应用程序指定的捆绑 ID 数量是否有限制?

    我一直尝试为我的本机 iOS 应用程序添加新的捆绑包 ID 尽管系统说它已保存 但当我 30 分钟后返回时 我添加的 ID 已不存在 目前我的应用程序中有 6 个捆绑包 谢谢各位 None
  • 我的对象的 ArrayList,indexOf 问题

    我对 Java 的 ArrayList 有问题 我创建了一个对象 它包含两个属性 x 和 y 现在我已经在 ArrayList 中加载了一些对象 问题是我不知道如何找到我正在搜索的具有 x 属性的某个对象的索引 有什么办法可以做到这一点吗
  • 优化查询

    我有以下功能 CREATE FUNCTION dbo SuiviRupture CodeArticle NVARCHAR 13 CodeSite NVARCHAR 5 CodeStructure NVARCHAR 13 RETURNS ca
  • 比较模型的同一性,但与变量?用减号构造?

    我的团队正在实施一个变体Ceusters 的参照物追踪 在我们的实现中 实体的原始 URI 可以更改 更改为包含 UUID 的内容 但始终保留原始 URI 的链接 例如 Joey rdf type person New York City
  • 反编译的程序集 - 异常代码

    我使用 ILSpy 反编译了一个程序集 其中一个类特别引起了我的注意 public class CustomTextStream NetworkStream private EventHandler
  • 获取 WinRT 中的当前用户

    我是一名 C 开发人员 我已经习惯了旧的Environment CurrentUser 现在我需要在我的 Windows 8 Metro 应用程序 html 和 js 中精确地做到这一点 那么我怎样才能得到它呢 Windows System
  • Lua中使用“#”运算符计算表的长度? [复制]

    这个问题在这里已经有答案了 我使用时有一个问题 计算表的长度 例如 local t a b local t1 a nil print t 2 print t1 1 local t a b local t1 nil a print t 2 p
  • ajax post后使用模型渲染页面

    是否可以发出 ajax post 请求 并在控制器中返回一个模型 然后使用该模型渲染页面 为了说明我的意思 假设我们有一个简单的 ajax 帖子 ajax url Home PostReq data JSON stringify data
  • 命令 `sed -i "s/^ \+//g; s/ \+/\t/g"` 是什么意思?

    我是新来的sed 有人可以帮我解释以下 sed 命令吗 sed i s g s t g 我找到了解释 i谷歌上有选项 但没有对上述模式含义的确切解释 抱歉 由于我们的内部服务器最近正在维护 因此我无法在此处显示示例文件 这意味着我无法访问此
  • 如何重定向到/user/dashboard

    我必须重定向到 user dashboard登录后的页面 但每次我关闭选项卡并再次打开它时 它都会打开默认主页 即 import React from react import isAuthenticated from helpers au
  • 重置/更改 mysql root 密码

    如何重置 更改 mysql root 密码Bitnami wamp 堆栈 我尝试这个solution但这对我不起作用 在bitnami文件夹中没有文件 bin mysqld nt exe 解决问题 1 停止服务 wampstackMySQL
  • 如何在kivy recycleview中仅选择一个按钮

    我正在使用 kivy recycleview 创建一个 mp3 播放器 该应用程序在播放列表屏幕中有很多按钮 每当您单击某个按钮时 该按钮的图标就会从 播放 更改为 暂停 反之亦然 我想知道如何以单击另一个按钮将所有其他按钮图标更改为 播放
  • Java 和 .NET 3.5 之间进程间通信的最佳方法是什么?

    第三方应用程序从 XML 文件中读取一些 Java 代码 并在发生特定事件时运行它 在 Java 中 我想告诉在同一台计算机上运行的 NET 3 5 应用程序发生了此事件 每次传输的总数据量大概就是几个字符 使用 Java 告诉 NET 进
  • UITextField 只能有正数

    我需要验证一个UITextField 我只想在其中输入正整数 我怎样才能做到这一点 添加 UITextFieldDelegate 并将此代码添加到您的类中 define LEAGELNUM 0123456789 BOOL textField
  • javascript 函数运行时 HTML 页面不会更新

    铬 FF Opera 和可能其他浏览器在进程结束时仅显示 100000 数字 但我希望看到按顺序显示 1 2 3 4 100000 这段代码不能很好地工作
  • 谷歌地图未填充模态弹出窗口

    当用户单击地图时 我使用模式弹出窗口在此页面上 这会显示带有方向的更大地图 然而 地图并没有填满整个空间 我不明白为什么 当我右键单击它以签入镀铬检查器时 它会使地图 填充模式 请原谅所有代码 但我认为最好将其全部包含在内 div clas
  • 寻找 .NET SNMP 扩展代理

    我正在开发一个 C 针对完整框架 4 Windows 应用程序 我需要该应用程序写入一些简单的计数器 更重要的是 当发生重大应用程序事件时 引发 或者应该触发 一些 SNMP 陷阱 现在大多数可用的 NET SNMP 库都可以做到这一点 到
  • Angularjs 加载模板很慢

    我有一些并没有真正做太多的事情 但它确实需要最长的时间来加载 我把代码写出来给大家看 app js var simple simple test angular module CRTapp controller ItemController
  • Android:在操作栏上添加 searchView

    我的完整项目如下 有一个listView连接到数据库和带建议的搜索选项 我想将此搜索栏移至操作栏并格式化它就像Google Play 商店搜索栏 请帮助我 我的完整代码是 MainActivity java package com Gurb