Android搜索框存储搜索记录

本文介绍了如何在App中实现搜索框的历史记录功能,包括关键字的保存、获取、删除及去重等关键技术要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.引入
越来越多的App都用到了搜索框,公司的项目也用到了搜索框,还提出来以下需求:输入框输入文字后,按照堆栈的形式把最近搜索记录显示在列表中,点击单个搜索记录可以删除,点击清空搜索记录删除所有的搜索距离。

2.相关的代码

保存关键字代码:

    // 保存关键字
    private void Save(String key) {
        SharedPreferences sp1 = getSharedPreferences(historykey, 0);
        String save_Str = sp1.getString("history", "");
        String[] hisArrays = save_Str.split(",");
        //关键字存储按时间倒序存(把数组倒序)
        StringBuilder sb = new StringBuilder(key);
        //数组倒序(始末倒序)
        for (int start = 0, end = hisArrays.length - 1; start < end; start++, end--) {
            String temp = hisArrays[end];
            hisArrays[end] = hisArrays[start];
            hisArrays[start] = temp;
        }
        sb.append( "," + save_Str);
        sp.edit().putString("history", sb.toString()).commit();

    }

获取关键字代码:

 // 获取历史关键字
    private List<String> get() {
        String save_history = sp.getString("history", "");
        String[] hisArrays = save_history.split(",");
        listhistory = new ArrayList<String>();
        List<String> list = new ArrayList<String>();
        for (int i = 0; i < hisArrays.length; i++) {
            list.add(hisArrays[i]);
        }
        //遍历, 去重(去老元素,留新元素)
        for(String s : list){//循环list
            if(!listhistory.contains(s)){
                listhistory.add(s);
            }
        }
        return listhistory;
    }

删除单条搜索记录的代码:

  @Override
                public void onItemChildClick(View view, int position) {
                    //点击删除单条历史记录
                    SharedPreferences sp1 = getSharedPreferences(historykey, 0);
                    String save_Str = sp1.getString("history", "");
                    String[] hisArrays = save_Str.split(",");
                    String str = "";
                    StringBuilder sb = new StringBuilder(str);

                    for (int i = 0; i < hisArrays.length; i++) {
                        if(i !=position){
                            sb.append(hisArrays[i] + ",");
                        }
                    }
                    sp.edit().putString("history", sb.toString()).commit();
                }
            });

**适配器中也要处理,不然刷新后列表中没有立即移除:**

  holder.single_close.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    mOnItemClickListener.onItemChildClick(view, position);
                    //点击删除单条历史记录
                    list.remove(position);
                    if(list.size() == 0){
                        historyLayout.setVisibility(View.GONE);
                    }
                    notifyDataSetChanged();
                }
            });

3.其中在保存关键字时用到了数组倒序(始末倒序),这一步是搜索记录倒序显示在列表上的关键

//数组倒序(始末倒序)
        for (int start = 0, end = hisArrays.length - 1; start < end; start++, end--) {
            String temp = hisArrays[end];
            hisArrays[end] = hisArrays[start];
            hisArrays[start] = temp;
        }

4.多次输入相同的关键字时要考虑将最新的一条关键字显示在第一条,同时把之前的关键字去重

 //遍历, 去重(去老元素,留新元素)
        for(String s : list){//循环list
            if(!listhistory.contains(s)){
                listhistory.add(s);
            }
        }

以上就是搜索框存储关键字和删除关键字的技术要点。

Android 中,存储搜索记录是一项常见的需求。一种简单的方法是使用 SharedPreferences 类来存储搜索关键字。 SharedPreferences 是一个轻量级的键值对存储结构,它提供了一种简单的方法来存储应用程序的简单配置信息。 以下是存储搜索记录的步骤: 1. 获取搜索关键字。 在搜索栏中输入关键字后,您需要从搜索栏中获取搜索关键字,并将其存储在应用程序中以备后用。可以使用文本编辑器获取搜索关键字。 2. 创建 SharedPreference 对象。 在应用程序中,您需要创建一个 SharedPreferences 对象,利用它来存储搜索关键字。可以使用以下代码创建 SharedPreferences 对象: SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE); 3. 获取 SharedPreference 编辑器。 SharedPreferences 编辑器允许您编辑 SharedPreference 对象并存储信息。可以使用以下代码获取 SharedPreferences 编辑器: SharedPreferences.Editor editor = sharedPref.edit(); 4. 存储搜索记录。 您可以使用以下代码将搜索关键字存储在 SharedPreferences 中: editor.putString("search_history", searchKeyword); 在这里,“search_history”是用于存储搜索记录的键,而“searchKeyword”是存储搜索关键字。 5. 确认更改并设置搜索记录。 最后,您需要提交 SharedPreferences 编辑器以保存更改,并将保存的搜索记录设置为应用程序的搜索框。可以使用以下代码提交编辑器并设置搜索历史记录: editor.apply(); searchBar.setSearchHistory(sharedPref.getString("search_history", null)); 这将使用 SharedPreferences 中保存的搜索历史记录初始化搜索框。 总之,使用 SharedPreferences 存储搜索记录是一项简单而有效的解决方案。但是,对于大型应用程序或需要复杂搜索历史记录管理的应用程序,将搜索记录存储在 SQLite 数据库中可能更加适合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值