AutoCompleteTextView自定义item布局
来源:互联网 发布:游戏数据修改器 编辑:程序博客网 时间:2024/05/17 22:09
一、给AutoCompleteTextView设置适配器,一般使用系统默认的适配器ArrayAdapter等
这样item的布局如下:
<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/item_txt_tip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="20dip" android:layout_marginTop="20dip" android:paddingTop="20dp" android:textColor="#000000" android:textSize="18sp" tools:targetApi="ice_cream_sandwich"></TextView>
二、但是我们想在item的布局中加入其他东西怎么办?这样我们只能自己定义适配器,首先先看看AutoCompleteTextView需要的适配器的类型,查看AutoCompleteTextView的setAdapter()方法的源码如下:
public <T extends ListAdapter & Filterable> void setAdapter(T adapter) { if (mObserver == null) { mObserver = new PopupDataSetObserver(this); } else if (mAdapter != null) { mAdapter.unregisterDataSetObserver(mObserver); } mAdapter = adapter; if (mAdapter != null) { //noinspection unchecked mFilter = ((Filterable) mAdapter).getFilter(); adapter.registerDataSetObserver(mObserver); } else { mFilter = null; } mPopup.setAdapter(mAdapter);}
从这里我们看出自定义的适配器可以继承BaseAdapter,但必须要实现Filterable接口,直接上源码。三、适配器核心代码:
public class PoiKeyTipListAdapter extends BaseAdapter implements Filterable { private ArrayList<String> stringArrayList ; private Context context; private OnDataChangedListener changedListener; public PoiKeyTipListAdapter(ArrayList<String> stringArrayList, Context context) { this.stringArrayList = stringArrayList; this.context = context; } @Override public int getCount() { return stringArrayList == null ? 0 : stringArrayList.size(); } @Override public Object getItem(int position) { return stringArrayList == null ? null : stringArrayList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null){ convertView = LayoutInflater.from(context).inflate(R.layout.item_input_tip_layout,parent,false); viewHolder = new ViewHolder(); viewHolder.item_txt_tip = (TextView) convertView.findViewById(R.id.item_txt_tip); convertView.setTag(viewHolder); }else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.item_txt_tip.setText(stringArrayList.get(position)); convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (changedListener != null) { changedListener.dataChangedListener(stringArrayList.get(position)); } } }); return convertView; } static class ViewHolder{ private TextView item_txt_tip ; } @Override public Filter getFilter() { return stringArrayList == null || stringArrayList.size() <= 0 ? null : new MyFilter(); } /** * 数据改变监听接口 * <h3>Version</h3> 1.0 * <h3>CreateTime</h3> 2016/3/30,9:57 * <h3>UpdateTime</h3> 2016/3/30,9:57 * <h3>CreateAuthor</h3> luzhenbang * <h3>UpdateAuthor</h3> * <h3>UpdateInfo</h3> (此处输入修改内容,若无修改可不写.) * */ public interface OnDataChangedListener{ void dataChangedListener(String keyWord); } /** * 设置数据改变监听 * <h3>Version</h3> 1.0 * <h3>CreateTime</h3> 2016/3/30,10:07 * <h3>UpdateTime</h3> 2016/3/30,10:07 * <h3>CreateAuthor</h3> luzhenbang * <h3>UpdateAuthor</h3> * <h3>UpdateInfo</h3> (此处输入修改内容,若无修改可不写.) * * @param changedListener OnDataChangedListener对象 */ public void setOnDataChangedListener(OnDataChangedListener changedListener){ this.changedListener = changedListener; } class MyFilter extends Filter{ @Override protected FilterResults performFiltering(CharSequence constraint) { return new MyFilterResults(); } @Override protected void publishResults(CharSequence constraint, FilterResults results) { } class MyFilterResults extends Filter.FilterResults{ public MyFilterResults() { values = stringArrayList; count = stringArrayList.size(); } } }}四、Activity中的核心代码:
public class MainActivity extends AppCompatActivity { private AutoCompleteTextView auto_txt_key_word; /** 数据列表*/ private ArrayList<String> strings; /** 适配器*/ private PoiKeyTipListAdapter poiKeyTipListAdapter; /** 记录选中的关键字*/ private String keyWordString; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); initData(); setWidgetListener(); } /** * 初始化Views */ private void initViews() { auto_txt_key_word = (AutoCompleteTextView) findViewById(R.id.auto_txt_key_word); } /** * 初始化数据 */ private void initData() { strings = new ArrayList<>(); for (int i = 0; i < 10; i++) { strings.add("内容" + i); } //使用系统提供的适配器 /* ArrayAdapter<String> aAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.item_input_hint_layout, strings); auto_txt_key_word.setAdapter(aAdapter);*/ //自定义适配器 poiKeyTipListAdapter = new PoiKeyTipListAdapter(strings,this); auto_txt_key_word.setAdapter(poiKeyTipListAdapter); //设置监听 } /** * 设置监听 */ private void setWidgetListener() { poiKeyTipListAdapter.setOnDataChangedListener(new PoiKeyTipListAdapter.OnDataChangedListener() { @Override public void dataChangedListener(String keyWord) { //记录选中的关键字 keyWordString = keyWord; auto_txt_key_word.setText(keyWord); strings.clear(); poiKeyTipListAdapter.notifyDataSetChanged(); } }); auto_txt_key_word.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //选中弹框列表的某一项、strings大小为0时,才能重新赋值 if (strings.size() <= 0 && !TextUtils.isEmpty(s) && !TextUtils.isEmpty(keyWordString) && !TextUtils.equals(s, keyWordString) ){ //重新赋值 for (int i = 0; i < 10; i++) { strings.add("内容" + i); } poiKeyTipListAdapter.notifyDataSetChanged(); } } @Override public void afterTextChanged(Editable s) { if (!TextUtils.isEmpty(s)){ auto_txt_key_word.setSelection(s.length()); } } }); }}五、效果图
源码:http://download.csdn.net/detail/lu1024188315/9477778
0 0
- AutoCompleteTextView自定义item布局
- 自定义AutoCompleteTextView
- 自定义AutoCompleteTextView
- 自定义AutoCompleteTextView
- 自定义AutoCompleteTextView
- 自定义AutoCompleteTextView
- 自定义AutoCompleteTextView
- Android自定义条目item优化布局
- 自定义Adapter 加载不同布局的item
- android AutoCompleteTextView 自定义BaseAdapter
- android AutoCompleteTextView 自定义BaseAdapter
- 自定义AutoCompleteTextView(续)
- android AutoCompleteTextView 自定义BaseAdapter
- AutoCompleteTextView结合自定义适配器
- android AutoCompleteTextView自定义Adapter
- android AutoCompleteTextView 自定义BaseAdapter
- AutoCompleteTextView自定义适配器
- ListView 自定义item布局 android.widget.LinearLayout$LayoutParams
- linux dnw
- iOS navigationBar的半透明颜色渐变效果实现
- mysql存储过程详解(1)
- 浅谈Activity之启动方式(5种启动方式和隐式启动)
- 2.1.1 搭建基本postfix环境-安装postfix和dovecot
- AutoCompleteTextView自定义item布局
- IBM PowerKVM
- Javascript和Ajax中文乱码吐血版解决方案
- mysq windows和linux安装以及常见命令文档
- Java基础collection
- iOS在更改用户头像并保存至本地沙盒目录中对于UIImagePickerController、UIAlertController的使用
- mongodb查看数据库和表的信息
- VSCode配置C++编写环境
- 递归3_计算多个数字