ArrayAdapter.java revision 9066cfe9886ac131c34d59ed0e2d287b0e3c0087
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.widget; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.LayoutInflater; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewGroup; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Arrays; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A ListAdapter that manages a ListView backed by an array of arbitrary 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * objects. By default this class expects that the provided resource id references 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a single TextView. If you want to use a more complex layout, use the constructors that 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * also takes a field id. That field id should reference a TextView in the larger layout 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resource. 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * However the TextView is referenced, it will be filled with the toString() of each object in 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the array. You can add lists or arrays of custom objects. Override the toString() method 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of your objects to determine what text will be displayed for the item in the list. 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * To use something other than TextViews for the array display, for instance, ImageViews, 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or to have some of data besides toString() results fill the views, 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * override {@link #getView(int, View, ViewGroup)} to return the type of view you want. 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ArrayAdapter<T> extends BaseAdapter implements Filterable { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Contains the list of objects that represent the data of this ArrayAdapter. 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content of this list is referred to as "the array" in the documentation. 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private List<T> mObjects; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Lock used to modify the content of {@link #mObjects}. Any write operation 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * performed on the array should be synchronized on this lock. This lock is also 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * used by the filter (see {@link #getFilter()} to make a synchronized copy of 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the original array of data. 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Object mLock = new Object(); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The resource indicating what views to inflate to display the content of this 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * array adapter. 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mResource; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The resource indicating what views to inflate to display the content of this 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * array adapter in a drop down widget. 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mDropDownResource; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the inflated resource is not a TextView, {@link #mFieldId} is used to find 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a TextView inside the inflated views hierarchy. This field must contain the 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * identifier that matches the one defined in the resource file. 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mFieldId = 0; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Indicates whether or not {@link #notifyDataSetChanged()} must be called whenever 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #mObjects} is modified. 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mNotifyOnChange = true; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Context mContext; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ArrayList<T> mOriginalValues; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ArrayFilter mFilter; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private LayoutInflater mInflater; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The current context. 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param textViewResourceId The resource ID for a layout file containing a TextView to use when 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instantiating views. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ArrayAdapter(Context context, int textViewResourceId) { 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project init(context, textViewResourceId, 0, new ArrayList<T>()); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The current context. 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param resource The resource ID for a layout file containing a layout to use when 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instantiating views. 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param textViewResourceId The id of the TextView within the layout resource to be populated 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ArrayAdapter(Context context, int resource, int textViewResourceId) { 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project init(context, resource, textViewResourceId, new ArrayList<T>()); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The current context. 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param textViewResourceId The resource ID for a layout file containing a TextView to use when 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instantiating views. 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param objects The objects to represent in the ListView. 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ArrayAdapter(Context context, int textViewResourceId, T[] objects) { 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project init(context, textViewResourceId, 0, Arrays.asList(objects)); 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The current context. 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param resource The resource ID for a layout file containing a layout to use when 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instantiating views. 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param textViewResourceId The id of the TextView within the layout resource to be populated 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param objects The objects to represent in the ListView. 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects) { 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project init(context, resource, textViewResourceId, Arrays.asList(objects)); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The current context. 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param textViewResourceId The resource ID for a layout file containing a TextView to use when 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instantiating views. 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param objects The objects to represent in the ListView. 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ArrayAdapter(Context context, int textViewResourceId, List<T> objects) { 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project init(context, textViewResourceId, 0, objects); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The current context. 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param resource The resource ID for a layout file containing a layout to use when 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instantiating views. 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param textViewResourceId The id of the TextView within the layout resource to be populated 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param objects The objects to represent in the ListView. 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects) { 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project init(context, resource, textViewResourceId, objects); 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Adds the specified object at the end of the array. 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param object The object to add at the end of the array. 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void add(T object) { 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mOriginalValues != null) { 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mLock) { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOriginalValues.add(object); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mNotifyOnChange) notifyDataSetChanged(); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mObjects.add(object); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mNotifyOnChange) notifyDataSetChanged(); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Inserts the specified object at the specified index in the array. 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param object The object to insert into the array. 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param index The index at which the object must be inserted. 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void insert(T object, int index) { 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mOriginalValues != null) { 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mLock) { 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOriginalValues.add(index, object); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mNotifyOnChange) notifyDataSetChanged(); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mObjects.add(index, object); 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mNotifyOnChange) notifyDataSetChanged(); 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Removes the specified object from the array. 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param object The object to remove. 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void remove(T object) { 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mOriginalValues != null) { 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mLock) { 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOriginalValues.remove(object); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mObjects.remove(object); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mNotifyOnChange) notifyDataSetChanged(); 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Remove all elements from the list. 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void clear() { 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mOriginalValues != null) { 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mLock) { 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOriginalValues.clear(); 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mObjects.clear(); 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mNotifyOnChange) notifyDataSetChanged(); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void notifyDataSetChanged() { 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.notifyDataSetChanged(); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNotifyOnChange = true; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Control whether methods that change the list ({@link #add}, 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #insert}, {@link #remove}, {@link #clear}) automatically call 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #notifyDataSetChanged}. If set to false, caller must 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * manually call notifyDataSetChanged() to have the changes 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reflected in the attached view. 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default is true, and calling notifyDataSetChanged() 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resets the flag to true. 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param notifyOnChange if true, modifications to the list will 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * automatically call {@link 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * #notifyDataSetChanged} 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setNotifyOnChange(boolean notifyOnChange) { 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNotifyOnChange = notifyOnChange; 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void init(Context context, int resource, int textViewResourceId, List<T> objects) { 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext = context; 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResource = mDropDownResource = resource; 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mObjects = objects; 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFieldId = textViewResourceId; 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the context associated with this array adapter. The context is used 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to create views from the resource passed to the constructor. 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The Context associated with this adapter. 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Context getContext() { 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mContext; 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getCount() { 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mObjects.size(); 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public T getItem(int position) { 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mObjects.get(position); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the position of the specified item in the array. 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param item The item to retrieve the position of. 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The position of the specified item. 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getPosition(T item) { 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mObjects.indexOf(item); 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getItemId(int position) { 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return position; 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View getView(int position, View convertView, ViewGroup parent) { 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return createViewFromResource(position, convertView, parent, mResource); 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private View createViewFromResource(int position, View convertView, ViewGroup parent, 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int resource) { 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View view; 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextView text; 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (convertView == null) { 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project view = mInflater.inflate(resource, parent, false); 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project view = convertView; 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mFieldId == 0) { 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If no custom field is assigned, assume the whole resource is a TextView 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project text = (TextView) view; 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Otherwise, find the TextView field within the layout 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project text = (TextView) view.findViewById(mFieldId); 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (ClassCastException e) { 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e("ArrayAdapter", "You must supply a resource ID for a TextView"); 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalStateException( 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "ArrayAdapter requires the resource ID to be a TextView", e); 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project text.setText(getItem(position).toString()); 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return view; 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Sets the layout resource to create the drop down views.</p> 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param resource the layout resource defining the drop down views 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getDropDownView(int, android.view.View, android.view.ViewGroup) 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setDropDownViewResource(int resource) { 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.mDropDownResource = resource; 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View getDropDownView(int position, View convertView, ViewGroup parent) { 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return createViewFromResource(position, convertView, parent, mDropDownResource); 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates a new ArrayAdapter from external resources. The content of the array is 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * obtained through {@link android.content.res.Resources#getTextArray(int)}. 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The application's environment. 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param textArrayResId The identifier of the array to use as the data source. 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param textViewResId The identifier of the layout used to create views. 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return An ArrayAdapter<CharSequence>. 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static ArrayAdapter<CharSequence> createFromResource(Context context, 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int textArrayResId, int textViewResId) { 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence[] strings = context.getResources().getTextArray(textArrayResId); 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ArrayAdapter<CharSequence>(context, textViewResId, strings); 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Filter getFilter() { 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mFilter == null) { 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFilter = new ArrayFilter(); 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mFilter; 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>An array filter constrains the content of the array adapter with 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a prefix. Each item that does not start with the supplied prefix 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is removed from the list.</p> 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private class ArrayFilter extends Filter { 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected FilterResults performFiltering(CharSequence prefix) { 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FilterResults results = new FilterResults(); 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mOriginalValues == null) { 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mLock) { 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOriginalValues = new ArrayList<T>(mObjects); 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (prefix == null || prefix.length() == 0) { 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mLock) { 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ArrayList<T> list = new ArrayList<T>(mOriginalValues); 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project results.values = list; 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project results.count = list.size(); 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String prefixString = prefix.toString().toLowerCase(); 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<T> values = mOriginalValues; 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = values.size(); 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<T> newValues = new ArrayList<T>(count); 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final T value = values.get(i); 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String valueText = value.toString().toLowerCase(); 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // First match against the whole, non-splitted value 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (valueText.startsWith(prefixString)) { 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project newValues.add(value); 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String[] words = valueText.split(" "); 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int wordCount = words.length; 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int k = 0; k < wordCount; k++) { 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (words[k].startsWith(prefixString)) { 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project newValues.add(value); 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project results.values = newValues; 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project results.count = newValues.size(); 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return results; 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void publishResults(CharSequence constraint, FilterResults results) { 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //noinspection unchecked 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mObjects = (List<T>) results.values; 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (results.count > 0) { 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifyDataSetChanged(); 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifyDataSetInvalidated(); 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 456