Android搜索框存储搜索记录

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值