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账号输入框样式