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);
}
}
以上就是搜索框存储关键字和删除关键字的技术要点。