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.database.DataSetObserver; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewGroup; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * An Adapter object acts as a bridge between an {@link AdapterView} and the 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * underlying data for that view. The Adapter provides access to the data items. 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Adapter is also responsible for making a {@link android.view.View} for 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * each item in the data set. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.widget.ArrayAdapter 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.widget.CursorAdapter 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.widget.SimpleCursorAdapter 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic interface Adapter { 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Register an observer that is called when changes happen to the data used by this adapter. 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param observer the object that gets notified when the data set changes. 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void registerDataSetObserver(DataSetObserver observer); 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unregister an observer that has previously been registered with this 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * adapter via {@link #registerDataSetObserver}. 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param observer the object to unregister. 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void unregisterDataSetObserver(DataSetObserver observer); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * How many items are in the data set represented by this Adapter. 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Count of items. 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int getCount(); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the data item associated with the specified position in the data set. 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param position Position of the item whose data we want within the adapter's 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * data set. 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The data at the specified position. 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Object getItem(int position); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the row id associated with the specified position in the list. 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param position The position of the item within the adapter's data set whose row id we want. 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The id of the item at the specified position. 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long getItemId(int position); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 745e25c2c14593caee5638603120553ae1ec530f85Chet Haase * Indicates whether the item ids are stable across changes to the 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * underlying data. 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if the same id always refers to the same object. 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean hasStableIds(); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get a View that displays the data at the specified position in the data set. You can either 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * create a View manually or inflate it from an XML layout file. When the View is inflated, the 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * parent View (GridView, ListView...) will apply default layout parameters unless you use 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.LayoutInflater#inflate(int, android.view.ViewGroup, boolean)} 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to specify a root view and to prevent attachment to the root. 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param position The position of the item within the adapter's data set of the item whose view 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * we want. 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param convertView The old view to reuse, if possible. Note: You should check that this view 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is non-null and of an appropriate type before using. If it is not possible to convert 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this view to display the correct data, this method can create a new view. 93e1aaf9d76eeb56ba34ba38c921bc0a69548567d7Gilles Debunne * Heterogeneous lists can specify their number of view types, so that this View is 94e1aaf9d76eeb56ba34ba38c921bc0a69548567d7Gilles Debunne * always of the right type (see {@link #getViewTypeCount()} and 95e1aaf9d76eeb56ba34ba38c921bc0a69548567d7Gilles Debunne * {@link #getItemViewType(int)}). 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param parent The parent that this view will eventually be attached to 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A View corresponding to the data at the specified position. 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View getView(int position, View convertView, ViewGroup parent); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * An item view type that causes the {@link AdapterView} to ignore the item 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * view. For example, this can be used if the client does not want a 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * particular view to be given for conversion in 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getView(int, View, ViewGroup)}. 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getItemViewType(int) 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getViewTypeCount() 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final int IGNORE_ITEM_VIEW_TYPE = AdapterView.ITEM_VIEW_TYPE_IGNORE; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the type of View that will be created by {@link #getView} for the specified item. 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param position The position of the item within the adapter's data set whose view type we 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * want. 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return An integer representing the type of View. Two views should share the same type if one 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can be converted to the other in {@link #getView}. Note: Integers must be in the 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * range 0 to {@link #getViewTypeCount} - 1. {@link #IGNORE_ITEM_VIEW_TYPE} can 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * also be returned. 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #IGNORE_ITEM_VIEW_TYPE 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int getItemViewType(int position); 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of types of Views that will be created by 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getView}. Each type represents a set of views that can be 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * converted in {@link #getView}. If the adapter always returns the same 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * type of View for all items, this method should return 1. 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method will only be called when when the adapter is set on the 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the {@link AdapterView}. 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The number of types of Views that will be created by this adapter 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int getViewTypeCount(); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final int NO_SELECTION = Integer.MIN_VALUE; 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if this adapter doesn't contain any data. This is used to determine 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * whether the empty view should be displayed. A typical implementation will return 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * getCount() == 0 but since getCount() includes the headers and footers, specialized 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * adapters might want a different behavior. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isEmpty(); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 152