|
Android控件使用—AutoCompleteTextView自动补全实现搜索功能。
像这样的一个功能,首先,最上方是搜索框是一个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);
- }
复制代码
- 原始地址:http://blog.csdn.net/hebin320320/article/details/50482933
复制代码
|
|