Android Search 有历史记录 逐字检查 清空历史

来源:互联网 发布:阿里云国际版没信用卡 编辑:程序博客网 时间:2024/06/11 00:41

android 搜索demo 有历史记录 逐字检查 清空历史


</pre><pre name="code" class="java"><span style="font-size:14px;">package com.example.search;import com.example.search.SearchPopuWindow.OnSearch;import android.app.Activity;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewTreeObserver;import android.view.ViewTreeObserver.OnGlobalLayoutListener;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity {private SearchPopuWindow popuWindow;private int higt;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);View view = findViewById(R.id.title);popuWindow = new SearchPopuWindow(this);/** *  */popuWindow.setOnSearch(new OnSearch() {@Overridepublic void search(View btnView, String searchStr) {Button button = (Button) btnView;String t = button.getText().toString();Toast.makeText(MainActivity.this, t + "////" + searchStr,Toast.LENGTH_LONG).show();}});getHigt(view);findViewById(R.id.button1).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {popuWindow.showAsDropDown(v, 0, 0 - higt);}});}/** * 提取title高度 */private void getHigt(final View view) {ViewTreeObserver vto2 = view.getViewTreeObserver();vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {@SuppressWarnings("deprecation")@Overridepublic void onGlobalLayout() {view.getViewTreeObserver().removeGlobalOnLayoutListener(this);higt = view.getHeight();}});}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {if (popuWindow != null && popuWindow.isShowing()) {popuWindow.dismiss();} else {this.finish();}}return false;}}</span>

SearchAutoAdapter

<span style="font-size:14px;">package com.example.search;import java.util.ArrayList;import java.util.List;import android.annotation.SuppressLint;import android.content.Context;import android.content.SharedPreferences;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;@SuppressLint("DefaultLocale")public class SearchAutoAdapter extends BaseAdapter {private Context mContext;private ArrayList<SearchAutoData> mOriginalValues;// 所有的Itemprivate List<SearchAutoData> mObjects;// 过滤后的itemprivate final Object mLock = new Object();private int mMaxMatch = 10;// 最多显示多少个选项,负数表示全部public SearchAutoAdapter(Context context, int maxMatch) {this.mContext = context;this.mMaxMatch = maxMatch;initSearchHistory();mObjects = mOriginalValues;}public int getSize() {return mObjects.size();}@Overridepublic int getCount() {return null == mObjects ? 0 : mObjects.size();}@Overridepublic Object getItem(int position) {if (position == mObjects.size()) {clear();}return null == mObjects ? 0 : mObjects.get(position);}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {AutoHolder holder;if (convertView == null) {convertView = LayoutInflater.from(mContext).inflate(R.layout.seach_list_item, parent, false);holder = new AutoHolder();holder.content = (TextView) convertView.findViewById(R.id.auto_content);convertView.setTag(holder);} else {holder = (AutoHolder) convertView.getTag();}SearchAutoData data = mObjects.get(position);holder.content.setText(data.getContent());return convertView;}/** * 读取历史搜索记录 */public void initSearchHistory() {SharedPreferences sp = mContext.getSharedPreferences(SearchPopuWindow.SEARCH_HISTORY, 0);String longhistory = sp.getString(SearchPopuWindow.SEARCH_HISTORY, "");String[] hisArrays = longhistory.split(",");mOriginalValues = new ArrayList<SearchAutoData>();if (longhistory.equals("")) {return;}for (int i = 0; i < hisArrays.length; i++) {mOriginalValues.add(new SearchAutoData().setContent(hisArrays[i]));}mObjects = mOriginalValues;notifyDataSetChanged();}/** * 清空历史 */public void clear() {SharedPreferences sp = mContext.getSharedPreferences(SearchPopuWindow.SEARCH_HISTORY, 0);sp.edit().putString(SearchPopuWindow.SEARCH_HISTORY, "").commit();mObjects = null;mObjects = new ArrayList<SearchAutoData>();mOriginalValues = null;mOriginalValues = new ArrayList<SearchAutoData>();notifyDataSetChanged();}/** * 匹配过滤搜索内容 *  * @param prefix *            输入框中输入的内容 */public void performFiltering(CharSequence prefix) {if (prefix == null || prefix.length() == 0) {// 搜索框内容为空的时候显示所有历史记录synchronized (mLock) {mObjects = mOriginalValues;}} else {String prefixString = prefix.toString().toLowerCase();int count = mOriginalValues.size();ArrayList<SearchAutoData> newValues = new ArrayList<SearchAutoData>(count);for (int i = 0; i < count; i++) {final String value = mOriginalValues.get(i).getContent();final String valueText = value.toLowerCase();if (valueText.contains(prefixString)) {}if (valueText.startsWith(prefixString)) {newValues.add(new SearchAutoData().setContent(valueText));} else {final String[] words = valueText.split(" ");final int wordCount = words.length;for (int k = 0; k < wordCount; k++) {if (words[k].startsWith(prefixString)) {newValues.add(new SearchAutoData().setContent(value));break;}}}if (mMaxMatch > 0) {if (newValues.size() > mMaxMatch - 1) {break;}}}mObjects = newValues;}notifyDataSetChanged();}private class AutoHolder {TextView content;}}</span>

SearchPopuWindow

<span style="font-size:14px;">package com.example.search;import java.util.ArrayList;import java.util.Arrays;import android.annotation.SuppressLint;import android.app.Activity;import android.content.SharedPreferences;import android.graphics.drawable.BitmapDrawable;import android.text.Editable;import android.text.TextWatcher;import android.view.View;import android.view.ViewGroup;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.ListView;import android.widget.PopupWindow;import android.widget.AdapterView.OnItemClickListener;@SuppressLint("ViewConstructor")public class SearchPopuWindow extends PopupWindow {public static final String SEARCH_HISTORY = "search_history";/** * 搜索框 */private EditText searchEdit;/** * 删除叉子 */private ImageView delete;/** * 搜索按钮 */private Button searchBtn;/** * 历史搜索 */private ListView listView;private SearchAutoAdapter mSearchAutoAdapter;private View footer;private Activity activity;private boolean hasFooter = false;@SuppressWarnings("deprecation")public SearchPopuWindow(Activity activity) {this.activity = activity;View view = activity.getLayoutInflater().inflate(R.layout.search_popu,null);view.setFocusableInTouchMode(true);this.setContentView(view);this.setWindowLayoutMode(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);this.setBackgroundDrawable(new BitmapDrawable());this.setOutsideTouchable(true);this.setFocusable(true);this.setOnDismissListener(new OnDismissListener() {@Overridepublic void onDismiss() {searchEdit.setText("");}});initWidget(view);}/** * 初始化搜索栏控件 *  * @param view */private void initWidget(View view) {mSearchAutoAdapter = new SearchAutoAdapter(activity, -1);searchEdit = (EditText) view.findViewById(R.id.etSearch);delete = (ImageView) view.findViewById(R.id.ivDeleteText);searchBtn = (Button) view.findViewById(R.id.btnSearch);listView = (ListView) view.findViewById(R.id.auto_listview);footer = View.inflate(activity, R.layout.footer, null);if (haveHistory()) {listView.addFooterView(footer);hasFooter = true;}listView.setAdapter(mSearchAutoAdapter);listView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View view,int position, long arg3) {if (mSearchAutoAdapter.getSize() == position) {mSearchAutoAdapter.clear();listView.removeFooterView(footer);hasFooter = false;} else {SearchAutoData data = (SearchAutoData) mSearchAutoAdapter.getItem(position);searchEdit.setText(data.getContent());searchEdit.setSelection(data.getContent().length());}}});searchEdit.addTextChangedListener(new TextWatcher() {public void onTextChanged(CharSequence s, int start, int before,int count) {mSearchAutoAdapter.performFiltering(s);int i = mSearchAutoAdapter.getSize();if (i == 0) {if (hasFooter) {listView.removeFooterView(footer);hasFooter = false;}} else {if (!hasFooter) {listView.addFooterView(footer);listView.setAdapter(mSearchAutoAdapter);hasFooter = true;}}}public void beforeTextChanged(CharSequence s, int start, int count,int after) {}public void afterTextChanged(Editable s) {if (s.length() == 0) {delete.setVisibility(View.GONE);searchBtn.setText("取消");} else {delete.setVisibility(View.VISIBLE);searchBtn.setText("搜索");}}});delete.setOnClickListener(new OnClickListener() {public void onClick(View v) {searchEdit.setText("");}});searchBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {saveSearchHistory();mSearchAutoAdapter.initSearchHistory();search(arg0, searchEdit.getText().toString());SearchPopuWindow.this.dismiss();}});}/** * 有无历史记录 *  * @return */private boolean haveHistory() {SharedPreferences sp = activity.getSharedPreferences(SEARCH_HISTORY, 0);String longhistory = sp.getString(SEARCH_HISTORY, "");if (longhistory.equals("")) {return false;} else {return true;}}/** * 保存搜索记录 */private void saveSearchHistory() {String text = searchEdit.getText().toString().trim();if (text.length() < 1) {return;}SharedPreferences sp = activity.getSharedPreferences(SEARCH_HISTORY, 0);String longhistory = sp.getString(SEARCH_HISTORY, "");String[] tmpHistory = longhistory.split(",");ArrayList<String> history = new ArrayList<String>(Arrays.asList(tmpHistory));if (history.size() > 0) {int i;for (i = 0; i < history.size(); i++) {if (text.equals(history.get(i))) {history.remove(i);break;}}history.add(0, text);}if (history.size() > 0) {StringBuilder sb = new StringBuilder();for (int i = 0; i < history.size(); i++) {sb.append(history.get(i) + ",");}sp.edit().putString(SEARCH_HISTORY, sb.toString()).commit();} else {sp.edit().putString(SEARCH_HISTORY, text + ",").commit();}}/** * 搜索监听 *  * @param arg0 *            button view * @param str *            搜索记录 */private void search(View btnView, String str) {onSearch.search(btnView, str);}public void setOnSearch(OnSearch onSearch) {this.onSearch = onSearch;}private OnSearch onSearch;public static interface OnSearch {</span><pre name="code" class="java"><span style="font-size:14px;">package com.example.search;public class SearchAutoData {private String id = "";private String content = "";public String getId() {return id;}public SearchAutoData setId(String id) {this.id = id;return this;}public String getContent() {return content;}public SearchAutoData setContent(String content) {this.content = content;return this;}}</span>

public void search(View btnView, String searchStr);}}


实体

<span style="font-size:14px;">package com.example.search;public class SearchAutoData {private String id = "";private String content = "";public String getId() {return id;}public SearchAutoData setId(String id) {this.id = id;return this;}public String getContent() {return content;}public SearchAutoData setContent(String content) {this.content = content;return this;}}</span>

源码下载地址

0 0
原创粉丝点击