Android自定義輸入框提示功能
本文實(shí)例為大家分享了Android自定義輸入框提示的具體代碼,供大家參考,具體內(nèi)容如下
這是系統(tǒng)提供的一個(gè)控件:AutoCompleteTextView
<AutoCompleteTextView android:layout_marginLeft="20dp" android:id="@+id/name_edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="6" android:completionThreshold="1" android:textSize="15sp" android:maxLength="10" android:singleLine="true" android:paddingBottom="4dp" android:background="@null" android:hint="請(qǐng)輸入姓名"/>
但是我們想在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); }
自定義適配器核心代碼:
private PoiKeyTipListAdapter poiKeyTipListAdapter; poiKeyTipListAdapter = new PoiKeyTipListAdapter(this); nameEdit.setAdapter(poiKeyTipListAdapter); nameEdit.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) { if(nameEdit.getText().toString().length()>1){ //根據(jù)實(shí)際操作請(qǐng)求數(shù)據(jù) } } @Override public void afterTextChanged(Editable s) { } });
public class PoiKeyTipListAdapter extends BaseAdapter implements Filterable { private List<SendNameBean.DataBean> stringArrayList ; private Context context; private OnDataChangedListener changedListener; public PoiKeyTipListAdapter(Context context) { this.context = context; } public void setData(List<SendNameBean.DataBean> stringArrayList){ this.stringArrayList = stringArrayList; notifyDataSetChanged(); } @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); viewHolder.name = (TextView) convertView.findViewById(R.id.name); viewHolder.phone = (TextView) convertView.findViewById(R.id.phone); convertView.setTag(viewHolder); }else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.item_txt_tip.setText(stringArrayList.get(position).getProvinceName()+stringArrayList.get(position).getCityName()+stringArrayList.get(position).getCountyName()+stringArrayList.get(position).getTownName()+stringArrayList.get(position).getAddress()); viewHolder.name.setText(stringArrayList.get(position).getName()); viewHolder.phone.setText(stringArrayList.get(position).getPhone()); 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 ; private TextView name ; private TextView phone ; } @Override public Filter getFilter() { Filter filter=new Filter() { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); ArrayList<SendNameBean.DataBean> newData = new ArrayList<>(); if(stringArrayList!=null && stringArrayList.size()!=0){ newData.addAll(stringArrayList); } results.values = newData; results.count = newData.size(); return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { stringArrayList = (ArrayList)results.values; notifyDataSetChanged(); } }; return filter; } public interface OnDataChangedListener{ void dataChangedListener(SendNameBean.DataBean dataBean); } public void setOnDataChangedListener(OnDataChangedListener changedListener){ this.changedListener = changedListener; } }
效果圖
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android原生定位服務(wù)LocationManager
這篇文章主要為大家介紹了Android原生定位服務(wù)LocationManager實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Android開(kāi)發(fā)Intent跳轉(zhuǎn)傳遞list集合實(shí)現(xiàn)示例
這篇文章主要為大家介紹了Android開(kāi)發(fā)Intent跳轉(zhuǎn)傳遞list集合實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Android 開(kāi)發(fā)使用PopupWindow實(shí)現(xiàn)加載等待界面功能示例
這篇文章主要介紹了Android 開(kāi)發(fā)使用PopupWindow實(shí)現(xiàn)加載等待界面功能,結(jié)合實(shí)例形式分析了Android使用PopupWindow組件實(shí)現(xiàn)加載等待界面功能相關(guān)布局與功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2020-05-05Android中Notification用法實(shí)例總結(jié)
這篇文章主要介紹了Android中Notification用法,以實(shí)例形式較為詳細(xì)的分析并總結(jié)了Notification的功能與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10通過(guò)實(shí)例解析android Activity啟動(dòng)過(guò)程
這篇文章主要介紹了通過(guò)實(shí)例解析android Activity啟動(dòng)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Android持久化技術(shù)之文件的讀取與寫入實(shí)例詳解
這篇文章主要介紹了Android持久化技術(shù)之文件的讀取與寫入操作,結(jié)合實(shí)例形式較為詳細(xì)的分析講述了Android持久化操作的相關(guān)技巧與具體實(shí)現(xiàn)方法,需要的朋友可以參考下2016-01-01popupwindow焦點(diǎn)問(wèn)題解決方案
在android 開(kāi)發(fā)過(guò)程中,總會(huì)遇到一些問(wèn)題,比如popupwindow焦點(diǎn)問(wèn)題等等,我們?cè)撊绾谓鉀Q呢?需要的朋友可以了解下2012-11-11Android實(shí)現(xiàn)探探圖片滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)探探圖片滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Android自定義gridView仿頭條頻道拖動(dòng)管理功能
這篇文章主要介紹了Android自定義gridView仿頭條頻道拖動(dòng)管理功能,本文通過(guò)實(shí)例代碼效果圖展示給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12