Android AutoCompleteTextView 实现历史记录提示

来源:互联网 发布:模拟人生4网络股票 编辑:程序博客网 时间:2024/05/25 23:57
package com.stkj.ydzf.view;import java.util.HashSet;import java.util.Iterator;import android.content.Context;import android.content.SharedPreferences;import android.util.AttributeSet;import android.widget.ArrayAdapter;import android.widget.AutoCompleteTextView;/** * @author gqs * @date 2013-11-18 上午10:08:59 * @descripton :  该方法只支持 4.0以上  一下版本 可选用数据库存储或其他方式 *  */public class MyAutoCompleteView extends AutoCompleteTextView {private final String KEY_HISTORY = "history";private final int MAX_HISTORY = 50;private Context context;SharedPreferences sp;public MyAutoCompleteView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);this.context = context;sp = context.getSharedPreferences(KEY_HISTORY, 0);}public MyAutoCompleteView(Context context, AttributeSet attrs) {super(context, attrs);this.context = context;sp = context.getSharedPreferences(KEY_HISTORY, 0);}public MyAutoCompleteView(Context context) {super(context);this.context = context;sp = context.getSharedPreferences(KEY_HISTORY, 0);}public void saveHistory(ArrayAdapter<String> adapter) {String addText = getText().toString();if (addText == null || "".equals(addText)) {return;}HashSet<String> set = (HashSet<String>) context.getSharedPreferences(KEY_HISTORY, 0).getStringSet(KEY_HISTORY, null);if (set == null) {set = new HashSet<String>();}set.add(addText);//如果历史记录大于最大记录条数if (set.size() > MAX_HISTORY) {int size = set.size();Iterator ite = set.iterator();while (ite.hasNext() && set.size() > MAX_HISTORY) {set.remove(ite.next());}// for (int i = 0, l = size - MAX_HISTORY; i < l; i++) {// set.remove(i);// }sp.edit().putStringSet(KEY_HISTORY, set).commit();if (adapter != null) {adapter.add(addText);adapter.notifyDataSetChanged();}}}public void copyHistory(ArrayAdapter<String> adapter) {HashSet<String> set = (HashSet<String>) context.getSharedPreferences(KEY_HISTORY, 0).getStringSet(KEY_HISTORY, null);if (set != null)for (String str : set) {adapter.add(str);}}}




新建item_layout


<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="match_parent"      android:layout_height="match_parent"      >        <LinearLayout           android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_gravity="left"          >      <ImageView           android:id="@+id/img"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:src="@drawable/ic_launcher"          />      <TextView           android:id="@+id/tv"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          />  </LinearLayout>        <Button           android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_gravity="right"          android:text="删除"          />  </FrameLayout>


控件使用


import android.os.Bundle;  import android.app.Activity;  import android.view.Menu;  import android.view.View;  import android.view.View.OnClickListener;  import android.view.View.OnFocusChangeListener;  import android.widget.ArrayAdapter;  import android.widget.AutoCompleteTextView;  import android.widget.Button;    public class MainActivity extends Activity {        private Button btnSave;      private MyAutoCompleteView myacView;            ArrayAdapter<String> adapter;      @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);          myacView = (MyAutoCompleteView)findViewById(R.id.myautoView);          final ArrayAdapter<String> adapter= new ArrayAdapter<String>(this,R.layout.item_layout,R.id.tv);          myacView.copyHistory(adapter);          myacView.setAdapter(adapter);                                                              btnSave = (Button)findViewById(R.id.btnSave);                    btnSave.setOnClickListener(new OnClickListener() {                            @Override              public void onClick(View v) {                  myacView.saveHistory(adapter);                                }          });      }                }  
将ArrayAdapter 该为 BaseAdapter 即可实现类型QQ账号输入框样式