您的位置:首页 > 移动开发 > Android开发

Android控件使用—AutoCompleteTextView自动补全实现搜索功能

2016-01-08 14:56 1331 查看


像这样的一个功能,首先,最上方是搜索框是一个AutoCompleteTextView。

搜索的时候,将搜索的文字存到本地文件,然后再将本地文件存的值取出来加载成列表,也就是历史搜索记录:

将搜索文字写入本地文件的代码,这里将每个搜索的文字都存到本地,如果本地存在搜索的文字,那么就移除本地那个存在的文字,再将搜索的文字放入文件的最后一个,也就是历史搜索记录的最上边:

public void writeHistory(String path) {
LostFocus.HideInputText(context, title_search_tv_search);
Context ctx = this;
SharedPreferences SAVE = ctx.getSharedPreferences("save", MODE_PRIVATE);
List<String> date = readHistory();
if (!date.contains(path)) {
int n = SAVE.getInt("point", 0);
SharedPreferences.Editor editor = SAVE.edit();
editor.putString("path" + n, path);
editor.putInt("point", (n + 1) % 16);
editor.commit();
}else {
int k = SAVE.getInt("point",0);
date.remove(path);
date.add(k-1, path);
cleanHistory();
for (String str : date) {
int n = SAVE.getInt("point", 0);
SharedPreferences.Editor editor = SAVE.edit();
editor.putString("path" + n, str);
editor.putInt("point", (n + 1) % 16);
editor.commit();
}
}

}


将存的本地文件读取出来,返回一个list:

public List<String> readHistory() {
List<String> list = new ArrayList<String>();
Context ctx = this;
SharedPreferences SAVE = ctx.getSharedPreferences("save", MODE_PRIVATE);
int point = SAVE.getInt("point", 0);
String path;
final int N = 16;
for (int i = 0, n = point; i <= N; i++) {
path = SAVE.getString("path" + n, null);
if (path != null) {
list.add(path);
}
n = n > 0 ? (--n) : (--n + N) % 16;
}
return list;
}


清空历史记录:

public void cleanHistory() {
SharedPreferences sp = getSharedPreferences("save", 0);
SharedPreferences.Editor editor = sp.edit();
editor.clear();
editor.commit();
super.onDestroy();
}


历史记录列表

private void History_list() {
list1.clear();
List<String> date = readHistory();
String[] history_arr = date.toArray(new String[date.size()]);
if (history_arr.length != 0) {
if (history_arr.length > 5) {
String[] newArrays = new String[5];
// 实现数组之间的复制
System.arraycopy(history_arr, 0, newArrays, 0, 5);
for (int i = 0; i < newArrays.length; i++) {
his_beams = new Search_Beams();
String str = newArrays[i];
his_beams.setHistoryTitle(str);
list1.add(his_beams);
}
} else {
for (int i = 0; i < history_arr.length; i++) {
his_beams = new Search_Beams();
String str = history_arr[i];
his_beams.setHistoryTitle(str);
list1.add(his_beams);
}
}
history_adapter = new History_list(Search.this, context, list1);
main_search_history_listview.setAdapter(history_adapter);
}
}


读取本地文件,将搜索记录自动匹配展示出来:

private void ReadAuto() {
List<String> date = readHistory();
arr_adapter = new ArrayAdapter<>(context, R.layout.main_search_auto_item_01, date);
main_search_title_actv.setAdapter(arr_adapter);
main_search_title_actv.setDropDownHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
main_search_title_actv.setThreshold(1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: