1863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton/* 2863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Copyright (C) 2007 The Android Open Source Project 3863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 4863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Licensed under the Apache License, Version 2.0 (the "License"); 5863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * you may not use this file except in compliance with the License. 6863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * You may obtain a copy of the License at 7863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 8863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * http://www.apache.org/licenses/LICENSE-2.0 9863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 10863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Unless required by applicable law or agreed to in writing, software 11863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * distributed under the License is distributed on an "AS IS" BASIS, 12863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * See the License for the specific language governing permissions and 14863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * limitations under the License. 15863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 16863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 174e5a9e4ee5c1ecab0a7a8eebee883f3f189f5cb4Jeff Hamiltonpackage com.android.loaderapp.fragments; 18863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 19863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.content.Context; 20863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.net.Uri; 21863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.os.Parcel; 22863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.view.LayoutInflater; 23863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.view.View; 24863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.view.ViewGroup; 25863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport android.widget.BaseAdapter; 26863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 27863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonimport java.util.ArrayList; 28863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 29863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamiltonpublic abstract class ContactEntryAdapter<E extends ContactEntryAdapter.Entry> 30863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton extends BaseAdapter { 31863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 32863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton protected ArrayList<ArrayList<E>> mSections; 33863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton protected LayoutInflater mInflater; 34863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton protected Context mContext; 35863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton protected boolean mSeparators; 36863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 37863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 38863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Base class for adapter entries. 39863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 40863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static class Entry { 41863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public int type = -1; 42863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public String label; 43863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public String data; 44863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public Uri uri; 45863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public long id = 0; 46863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public long contactId; 47863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public int maxLines = 1; 48863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public String mimetype; 49863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 50863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 51863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Helper for making subclasses parcelable. 52863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 53863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton protected void writeToParcel(Parcel p) { 54863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton p.writeInt(type); 55863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton p.writeString(label); 56863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton p.writeString(data); 57863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton p.writeParcelable(uri, 0); 58863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton p.writeLong(id); 59863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton p.writeInt(maxLines); 60863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton p.writeString(mimetype); 61863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 62863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 63863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 64863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Helper for making subclasses parcelable. 65863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 66863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton protected void readFromParcel(Parcel p) { 67863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton final ClassLoader loader = getClass().getClassLoader(); 68863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton type = p.readInt(); 69863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton label = p.readString(); 70863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton data = p.readString(); 71863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton uri = p.readParcelable(loader); 72863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton id = p.readLong(); 73863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton maxLines = p.readInt(); 74863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton mimetype = p.readString(); 75863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 76863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 77863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 78863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton ContactEntryAdapter(Context context, ArrayList<ArrayList<E>> sections, boolean separators) { 79863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton mContext = context; 80863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 81863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton mSections = sections; 82863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton mSeparators = separators; 83863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 84863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 85863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 86863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Resets the section data. 87863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 88863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param sections the section data 89863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 90863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public final void setSections(ArrayList<ArrayList<E>> sections, boolean separators) { 91863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton mSections = sections; 92863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton mSeparators = separators; 93863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton notifyDataSetChanged(); 94863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 95863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 96863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 97863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Resets the section data and returns the position of the given entry. 98863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 99863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param sections the section data 100863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param entry the entry to return the position for 101863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @return the position of entry, or -1 if it isn't found 102863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 103863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public final int setSections(ArrayList<ArrayList<E>> sections, E entry) { 104863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton mSections = sections; 105863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton notifyDataSetChanged(); 106863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 107863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton int numSections = mSections.size(); 108863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton int position = 0; 109863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton for (int i = 0; i < numSections; i++) { 110863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton ArrayList<E> section = mSections.get(i); 111863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton int sectionSize = section.size(); 112863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton for (int j = 0; j < sectionSize; j++) { 113863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton E e = section.get(j); 114863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (e.equals(entry)) { 115863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton position += j; 116863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return position; 117863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 118863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 119863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton position += sectionSize; 120863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 121863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return -1; 122863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 123863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 124863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 125863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @see android.widget.ListAdapter#getCount() 126863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 127863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public final int getCount() { 128863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return countEntries(mSections, mSeparators); 129863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 130863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 131863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 132863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @see android.widget.ListAdapter#hasSeparators() 133863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 134863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton @Override 135863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public final boolean areAllItemsEnabled() { 136863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return mSeparators == false; 137863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 138863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 139863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 140863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @see android.widget.ListAdapter#isSeparator(int) 141863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 142863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton @Override 143863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public final boolean isEnabled(int position) { 144863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (!mSeparators) { 145863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return true; 146863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 147863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 148863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton int numSections = mSections.size(); 149863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton for (int i = 0; i < numSections; i++) { 150863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton ArrayList<E> section = mSections.get(i); 151863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton int sectionSize = section.size(); 152863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (sectionSize == 1) { 153863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton // The section only contains a separator and nothing else, skip it 154863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton continue; 155863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 156863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (position == 0) { 157863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton // The first item in a section is always the separator 158863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return false; 159863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 160863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton position -= sectionSize; 161863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 162863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return true; 163863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 164863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 165863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 166863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @see android.widget.ListAdapter#getItem(int) 167863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 168863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public final Object getItem(int position) { 169863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return getEntry(mSections, position, mSeparators); 170863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 171863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 172863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 173863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Get the entry for the given position. 174863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 175863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param sections the list of sections 176863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param position the position for the desired entry 177863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @return the ContactEntry for the given position 178863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 179863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public final static <T extends Entry> T getEntry(ArrayList<ArrayList<T>> sections, 180863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton int position, boolean separators) { 181863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton int numSections = sections.size(); 182863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton for (int i = 0; i < numSections; i++) { 183863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton ArrayList<T> section = sections.get(i); 184863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton int sectionSize = section.size(); 185863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (separators && sectionSize == 1) { 186863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton // The section only contains a separator and nothing else, skip it 187863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton continue; 188863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 189863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (position < section.size()) { 190863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return section.get(position); 191863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 192863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton position -= section.size(); 193863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 194863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return null; 195863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 196863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 197863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 198863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Get the count of entries in all sections 199863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 200863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param sections the list of sections 201863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @return the count of entries in all sections 202863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 203863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public static <T extends Entry> int countEntries(ArrayList<ArrayList<T>> sections, 204863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton boolean separators) { 205863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton int count = 0; 206863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton int numSections = sections.size(); 207863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton for (int i = 0; i < numSections; i++) { 208863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton ArrayList<T> section = sections.get(i); 209863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton int sectionSize = section.size(); 210863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (separators && sectionSize == 1) { 211863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton // The section only contains a separator and nothing else, skip it 212863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton continue; 213863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 214863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton count += sections.get(i).size(); 215863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 216863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return count; 217863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 218863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 219863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 220863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @see android.widget.ListAdapter#getItemId(int) 221863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 222863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public final long getItemId(int position) { 223863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton Entry entry = getEntry(mSections, position, mSeparators); 224863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (entry != null) { 225863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return entry.id; 226863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } else { 227863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return -1; 228863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 229863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 230863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 231863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 232863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @see android.widget.ListAdapter#getView(int, View, ViewGroup) 233863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 234863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton public View getView(int position, View convertView, ViewGroup parent) { 235863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton View v; 236863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton if (convertView == null) { 237863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton v = newView(position, parent); 238863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } else { 239863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton v = convertView; 240863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 241863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton bindView(v, getEntry(mSections, position, mSeparators)); 242863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton return v; 243863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton } 244863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 245863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 246863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Create a new view for an entry. 247863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 248863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @parent the parent ViewGroup 249863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @return the newly created view 250863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 251863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton protected abstract View newView(int position, ViewGroup parent); 252863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton 253863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton /** 254863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * Binds the data from an entry to a view. 255863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * 256863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param view the view to display the entry in 257863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton * @param entry the data to bind 258863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton */ 259863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton protected abstract void bindView(View view, E entry); 260863e7a55dc45cd1210e4d07e5847f48dfe301876Jeff Hamilton} 261