Android搜索框存储搜索记录

来源:互联网 发布:51单片机蜂鸣器程序 编辑:程序博客网 时间:2024/05/20 03:46

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

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

阅读全文
0 0
原创粉丝点击