- 浏览: 226527 次
- 性别:
- 来自: 北京
最新评论
-
凌空之鹤:
请问阁下:你代码里的response是如何获取的啊,能不能把最 ...
Android中文乱码彻底解决 -
blueflo:
mengsina 写道有个问题,就是将Parcelable做为 ...
Activitie之间传对象,通过Parcelable -
mengsina:
有个问题,就是将Parcelable做为一个数组传到里面去。A ...
Activitie之间传对象,通过Parcelable -
lauphai:
不行啊。。。。。没有那个球啊。。。
Android下修改SeekBar样式 -
dingyushuang:
这个query方法得创建,是干吗用的。而且、、怎样以列表的形式 ...
获取系统音乐
具体看代码:
public class CityAdapter<T> extends BaseAdapter implements Filterable { /** * Contains the list of objects that represent the data of this ArrayAdapter. * The content of this list is referred to as "the array" in the documentation. */ private List<T> mObjects; private List<T> mObjects2; /** * Lock used to modify the content of {@link #mObjects}. Any write operation * performed on the array should be synchronized on this lock. This lock is also * used by the filter (see {@link #getFilter()} to make a synchronized copy of * the original array of data. */ private final Object mLock = new Object(); /** * The resource indicating what views to inflate to display the content of this * array adapter. */ private int mResource; /** * The resource indicating what views to inflate to display the content of this * array adapter in a drop down widget. */ private int mDropDownResource; /** * If the inflated resource is not a TextView, {@link #mFieldId} is used to find * a TextView inside the inflated views hierarchy. This field must contain the * identifier that matches the one defined in the resource file. */ private int mFieldId = 0; /** * Indicates whether or not {@link #notifyDataSetChanged()} must be called whenever * {@link #mObjects} is modified. */ private boolean mNotifyOnChange = true; private Context mContext; private ArrayList<T> mOriginalValues; private ArrayFilter mFilter; private LayoutInflater mInflater; /** * Constructor * * @param context The current context. * @param textViewResourceId The resource ID for a layout file containing a TextView to use when * instantiating views. */ public CityAdapter(Context context, int textViewResourceId) { init(context, textViewResourceId, 0, new ArrayList<T>(),new ArrayList<T>()); } /** * Constructor * * @param context The current context. * @param resource The resource ID for a layout file containing a layout to use when * instantiating views. * @param textViewResourceId The id of the TextView within the layout resource to be populated */ public CityAdapter(Context context, int resource, int textViewResourceId) { init(context, resource, textViewResourceId, new ArrayList<T>(),new ArrayList<T>()); } /** * Constructor * * @param context The current context. * @param textViewResourceId The resource ID for a layout file containing a TextView to use when * instantiating views. * @param objects The objects to represent in the ListView. * @param objects2 城市拼音数组 */ public CityAdapter(Context context, int textViewResourceId, T[] objects,T[] objects2) { init(context, textViewResourceId, 0, Arrays.asList(objects),Arrays.asList(objects2)); } /** * Constructor * * @param context The current context. * @param resource The resource ID for a layout file containing a layout to use when * instantiating views. * @param textViewResourceId The id of the TextView within the layout resource to be populated * @param objects The objects to represent in the ListView. */ public CityAdapter(Context context, int resource, int textViewResourceId, T[] objects,T[] objects2) { init(context, resource, textViewResourceId, Arrays.asList(objects),Arrays.asList(objects2)); } /** * Constructor * * @param context The current context. * @param textViewResourceId The resource ID for a layout file containing a TextView to use when * instantiating views. * @param objects The objects to represent in the ListView. */ public CityAdapter(Context context, int textViewResourceId, List<T> objects,List<T> objects2) { init(context, textViewResourceId, 0, objects,objects2); } /** * Constructor * * @param context The current context. * @param resource The resource ID for a layout file containing a layout to use when * instantiating views. * @param textViewResourceId The id of the TextView within the layout resource to be populated * @param objects The objects to represent in the ListView. */ public CityAdapter(Context context, int resource, int textViewResourceId, List<T> objects,List<T> objects2) { init(context, resource, textViewResourceId, objects, objects2); } /** * Adds the specified object at the end of the array. * * @param object The object to add at the end of the array. */ public void add(T object) { if (mOriginalValues != null) { synchronized (mLock) { mOriginalValues.add(object); if (mNotifyOnChange) notifyDataSetChanged(); } } else { mObjects.add(object); if (mNotifyOnChange) notifyDataSetChanged(); } } /** * Inserts the specified object at the specified index in the array. * * @param object The object to insert into the array. * @param index The index at which the object must be inserted. */ public void insert(T object, int index) { if (mOriginalValues != null) { synchronized (mLock) { mOriginalValues.add(index, object); if (mNotifyOnChange) notifyDataSetChanged(); } } else { mObjects.add(index, object); if (mNotifyOnChange) notifyDataSetChanged(); } } /** * Removes the specified object from the array. * * @param object The object to remove. */ public void remove(T object) { if (mOriginalValues != null) { synchronized (mLock) { mOriginalValues.remove(object); } } else { mObjects.remove(object); } if (mNotifyOnChange) notifyDataSetChanged(); } /** * Remove all elements from the list. */ public void clear() { if (mOriginalValues != null) { synchronized (mLock) { mOriginalValues.clear(); } } else { mObjects.clear(); } if (mNotifyOnChange) notifyDataSetChanged(); } /** * Sorts the content of this adapter using the specified comparator. * * @param comparator The comparator used to sort the objects contained * in this adapter. */ public void sort(Comparator<? super T> comparator) { Collections.sort(mObjects, comparator); if (mNotifyOnChange) notifyDataSetChanged(); } /** * {@inheritDoc} */ @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); mNotifyOnChange = true; } /** * Control whether methods that change the list ({@link #add}, * {@link #insert}, {@link #remove}, {@link #clear}) automatically call * {@link #notifyDataSetChanged}. If set to false, caller must * manually call notifyDataSetChanged() to have the changes * reflected in the attached view. * * The default is true, and calling notifyDataSetChanged() * resets the flag to true. * * @param notifyOnChange if true, modifications to the list will * automatically call {@link * #notifyDataSetChanged} */ public void setNotifyOnChange(boolean notifyOnChange) { mNotifyOnChange = notifyOnChange; } private void init(Context context, int resource, int textViewResourceId, List<T> objects ,List<T> objects2) { mContext = context; mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mResource = mDropDownResource = resource; mObjects = objects; mObjects2 = objects2; mFieldId = textViewResourceId; } /** * Returns the context associated with this array adapter. The context is used * to create views from the resource passed to the constructor. * * @return The Context associated with this adapter. */ public Context getContext() { return mContext; } /** * {@inheritDoc} */ public int getCount() { return mObjects.size(); } /** * {@inheritDoc} */ public T getItem(int position) { return mObjects.get(position); } /** * Returns the position of the specified item in the array. * * @param item The item to retrieve the position of. * * @return The position of the specified item. */ public int getPosition(T item) { return mObjects.indexOf(item); } /** * {@inheritDoc} */ public long getItemId(int position) { return position; } /** * {@inheritDoc} */ public View getView(int position, View convertView, ViewGroup parent) { return createViewFromResource(position, convertView, parent, mResource); } private View createViewFromResource(int position, View convertView, ViewGroup parent, int resource) { View view; TextView text; if (convertView == null) { view = mInflater.inflate(resource, parent, false); } else { view = convertView; } try { if (mFieldId == 0) { // If no custom field is assigned, assume the whole resource is a TextView text = (TextView) view; } else { // Otherwise, find the TextView field within the layout text = (TextView) view.findViewById(mFieldId); } } catch (ClassCastException e) { Log.e("ArrayAdapter", "You must supply a resource ID for a TextView"); throw new IllegalStateException( "ArrayAdapter requires the resource ID to be a TextView", e); } text.setText(getItem(position).toString()); return view; } /** * <p>Sets the layout resource to create the drop down views.</p> * * @param resource the layout resource defining the drop down views * @see #getDropDownView(int, android.view.View, android.view.ViewGroup) */ public void setDropDownViewResource(int resource) { this.mDropDownResource = resource; } /** * {@inheritDoc} */ @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { return createViewFromResource(position, convertView, parent, mDropDownResource); } /** * Creates a new ArrayAdapter from external resources. The content of the array is * obtained through {@link android.content.res.Resources#getTextArray(int)}. * * @param context The application's environment. * @param textArrayResId The identifier of the array to use as the data source. * @param textViewResId The identifier of the layout used to create views. * * @return An ArrayAdapter<CharSequence>. */ public static ArrayAdapter<CharSequence> createFromResource(Context context, int textArrayResId, int textViewResId) { CharSequence[] strings = context.getResources().getTextArray(textArrayResId); return new ArrayAdapter<CharSequence>(context, textViewResId, strings); } /** * {@inheritDoc} */ public Filter getFilter() { if (mFilter == null) { mFilter = new ArrayFilter(); } return mFilter; } /** * <p>An array filter constrains the content of the array adapter with * a prefix. Each item that does not start with the supplied prefix * is removed from the list.</p> */ private class ArrayFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence prefix) { FilterResults results = new FilterResults(); if (mOriginalValues == null) { synchronized (mLock) { mOriginalValues = new ArrayList<T>(mObjects); } } if (prefix == null || prefix.length() == 0) { synchronized (mLock) { ArrayList<T> list = new ArrayList<T>(mOriginalValues); results.values = list; results.count = list.size(); } } else { String prefixString = prefix.toString().toLowerCase(); final ArrayList<T> values = mOriginalValues; final int count = values.size(); final ArrayList<T> newValues = new ArrayList<T>(count); for (int i = 0; i < count; i++) { final T value = values.get(i); final String valueText = value.toString().toLowerCase(); final T value2 = mObjects2.get(i); final String valueText2 = value2.toString().toLowerCase(); //查找拼音 if(valueText2.startsWith(prefixString)){ newValues.add(value); //查找汉字 }else if(valueText.startsWith(prefixString)){ newValues.add(value); }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(value); break; } } //添加拼音关联汉字 final String[] words2 = valueText2.split(" "); final int wordCount2 = words2.length; for (int k = 0; k < wordCount2; k++) { if (words2[k].startsWith(prefixString)) { newValues.add(value); break; } } } } results.values = newValues; results.count = newValues.size(); } return results; } @SuppressWarnings("unchecked") @Override protected void publishResults(CharSequence constraint, FilterResults results) { mObjects = (List<T>) results.values; if (results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } } }
调用代码如下:
cAdapter = new CityAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,汉字数组,拼音数组); autoView.setAdapter(cAdapter); autoView.setThreshold(1); //其中 autoView 为 AutoCompleteTextView
效果图如下:
评论
3 楼
liujunvy89
2011-09-27
我怎么出现乱码
2 楼
xiaopei0714
2011-08-08
表示假设我最初无法确定究竟有多少汉字跟别提找到对应的拼音数组(好比我们的通讯录),这样子要怎么实现?而且还有那种名字首字母匹配的,恳请赐教,拜托拜托
1 楼
forgottenp
2010-10-21
非常好的东西啊,试试先。3Q
发表评论
-
处理按键长按事件
2011-02-23 17:54 2214public boolean dispatchKeyEv ... -
调用系统软件详情
2011-02-23 17:45 1157Intent intent = new Intent(& ... -
PopupWindow设置AnimationStyle
2010-10-15 14:21 2581<?xml version="1.0& ... -
键盘显示与隐藏
2010-10-15 14:18 1397InputMethodManager imm = ... -
键盘挤压界面问题
2010-10-12 14:30 1477Activity中添加 android:windowSoftI ... -
PopupWindow 点击返回不消失
2010-09-23 16:45 3420注册一个PopupWindow 显示出来按返回键居然不消失,很 ... -
android 下的ftp注意问题
2010-07-28 14:44 3781以下代码在pc上测试通过,可是在android模拟器上就不工作 ... -
关闭键盘显示
2010-07-14 10:13 1605两种方法: 法一: InputMethodManag ... -
使用Git下载Google Android源代码
2010-07-14 08:53 1962文章来自:http://zzmccnu.iteye.com/b ... -
定制个性化屏保(转)
2010-03-30 17:08 3146转自:http://blog.csdn.net/w ... -
自定义Dialog
2010-03-09 09:08 1926代码如下: SearchDialog.java im ... -
TextView滚动效果
2010-03-02 10:15 3942<TextView android:id ... -
Activitie之间传对象,通过Parcelable
2010-02-26 15:42 13103对象必须实现Serializable,对象代码如下: imp ... -
程序卸载应用程序
2010-02-26 15:33 1196Uri packageURI = Uri.parse(&quo ... -
本地程序打开其它程序
2010-02-26 15:31 2163Intent i = new Intent("and ... -
调用market搜索软件
2010-02-26 15:27 3799Intent installIntent = new Inte ... -
RGB转成ARGB
2010-02-26 15:19 5230colors.xml <?xml version=&q ... -
改写Preference
2010-02-26 15:15 1694代码如下: import android.content.C ... -
改写ListView样式
2010-02-26 15:08 6792<ListView android:id=&qu ... -
重写SimpleCursorAdapter
2010-02-26 15:01 4169import android.content.Context; ...
相关推荐
AutoCompleteTextView汉字和拼音关联,可以输入汉字和拼音查询
用AutoCompleteTextView实现中文和拼音关联自动提示
android API中的 AutoCompleteTextView组件只能匹配过滤纯英文或者纯汉字的 经过改进后可以输入 汉字拼音匹配汉字 类似于百度搜索 例如输入x 会匹配“迅雷”“迅速” 如果输入s 也可以匹配 “迅速”
AutoCompleteTextView具有输入提示的功能,但是它的这种提示不适合对股票列表的过滤,如果你玩过股票软件,就会知道只要输入股票名称的首字母或股票代码就会出现符合匹配的股票,这种过滤怎么实现呢? 还有个问题,...
可以参考下面博客:我的Android进阶之旅------>Android之AutoCompleteTextView输入汉字拼音首字母实现过滤提示(支持多音字) (博客地址:http://blog.csdn.net/ouyang_peng/article/details/8826806)
稍微优化了一下 博文链接:https://gundumw100.iteye.com/blog/1331282
AutoCompleteTextView实现历史记录功能,可正常运行。
AutoCompleteTextView+SQLite实现自动检索
AutoCompleteTextView中输入字母或者汉字通过Filterable实现自动筛选提醒
比如在百度搜索内容时,当我们在搜索框内输入部分内容时,下面就会出现很多相关内容的提示供我们选择。要在手机的一个输入框中也实现这样的功能。该怎么做呢?可以研究此代码的实现方法
使用DrawerLayout+ListView+AutoCompleteTextView实现侧滑+提示+筛选+再次筛选数据功能
Android AutoCompleteTextView控件学习 博客地址:http://blog.csdn.net/csdnyuandaimaxuexi/article/details/48439951
AutoCompleteTextView和adapter的使用,里面用了arrayAdapter和simpleAdapter
autoCompleteTextView自定义BaseAdapter,实现下拉单的自定义样式,用sqlite数据库存放历史记录,进行写入时提示。点击某个下拉单写入autoCompleeTextView中。
android 百度地图 AutoCompleteTextView联想刷新实现检索 很全面的
AutoCompleteTextViewDemo,实现显示历史记录功能。
实现工具Android studio,一般AutoCompleteTextView提示语列表的适配器只能系统提供的ArrayAdapter等,这里自定义适配器继承了BaseAdapter。
AutoCompleteTextView大多是采用ArrayAdapter进行适配的,这种有时候并不能满足我们的需求,所以就有了这个demo
AutoCompleteTextView 显示更多