/*
 * Copyright (C) 2006 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.widget;

import android.annotation.Nullable;
import android.database.DataSetObserver;
import android.view.View;
import android.view.ViewGroup;

An Adapter object acts as a bridge between an AdapterView and the underlying data for that view. The Adapter provides access to the data items. The Adapter is also responsible for making a View for each item in the data set.
See Also:
/** * An Adapter object acts as a bridge between an {@link AdapterView} and the * underlying data for that view. The Adapter provides access to the data items. * The Adapter is also responsible for making a {@link android.view.View} for * each item in the data set. * * @see android.widget.ArrayAdapter * @see android.widget.CursorAdapter * @see android.widget.SimpleCursorAdapter */
public interface Adapter {
Register an observer that is called when changes happen to the data used by this adapter.
Params:
  • observer – the object that gets notified when the data set changes.
/** * Register an observer that is called when changes happen to the data used by this adapter. * * @param observer the object that gets notified when the data set changes. */
void registerDataSetObserver(DataSetObserver observer);
Unregister an observer that has previously been registered with this adapter via registerDataSetObserver.
Params:
  • observer – the object to unregister.
/** * Unregister an observer that has previously been registered with this * adapter via {@link #registerDataSetObserver}. * * @param observer the object to unregister. */
void unregisterDataSetObserver(DataSetObserver observer);
How many items are in the data set represented by this Adapter.
Returns:Count of items.
/** * How many items are in the data set represented by this Adapter. * * @return Count of items. */
int getCount();
Get the data item associated with the specified position in the data set.
Params:
  • position – Position of the item whose data we want within the adapter's data set.
Returns:The data at the specified position.
/** * Get the data item associated with the specified position in the data set. * * @param position Position of the item whose data we want within the adapter's * data set. * @return The data at the specified position. */
Object getItem(int position);
Get the row id associated with the specified position in the list.
Params:
  • position – The position of the item within the adapter's data set whose row id we want.
Returns:The id of the item at the specified position.
/** * Get the row id associated with the specified position in the list. * * @param position The position of the item within the adapter's data set whose row id we want. * @return The id of the item at the specified position. */
long getItemId(int position);
Indicates whether the item ids are stable across changes to the underlying data.
Returns:True if the same id always refers to the same object.
/** * Indicates whether the item ids are stable across changes to the * underlying data. * * @return True if the same id always refers to the same object. */
boolean hasStableIds();
Get a View that displays the data at the specified position in the data set. You can either create a View manually or inflate it from an XML layout file. When the View is inflated, the parent View (GridView, ListView...) will apply default layout parameters unless you use LayoutInflater.inflate(int, ViewGroup, boolean) to specify a root view and to prevent attachment to the root.
Params:
  • position – The position of the item within the adapter's data set of the item whose view we want.
  • convertView – The old view to reuse, if possible. Note: You should check that this view is non-null and of an appropriate type before using. If it is not possible to convert this view to display the correct data, this method can create a new view. Heterogeneous lists can specify their number of view types, so that this View is always of the right type (see getViewTypeCount() and getItemViewType(int)).
  • parent – The parent that this view will eventually be attached to
Returns:A View corresponding to the data at the specified position.
/** * Get a View that displays the data at the specified position in the data set. You can either * create a View manually or inflate it from an XML layout file. When the View is inflated, the * parent View (GridView, ListView...) will apply default layout parameters unless you use * {@link android.view.LayoutInflater#inflate(int, android.view.ViewGroup, boolean)} * to specify a root view and to prevent attachment to the root. * * @param position The position of the item within the adapter's data set of the item whose view * we want. * @param convertView The old view to reuse, if possible. Note: You should check that this view * is non-null and of an appropriate type before using. If it is not possible to convert * this view to display the correct data, this method can create a new view. * Heterogeneous lists can specify their number of view types, so that this View is * always of the right type (see {@link #getViewTypeCount()} and * {@link #getItemViewType(int)}). * @param parent The parent that this view will eventually be attached to * @return A View corresponding to the data at the specified position. */
View getView(int position, View convertView, ViewGroup parent);
An item view type that causes the AdapterView to ignore the item view. For example, this can be used if the client does not want a particular view to be given for conversion in getView(int, View, ViewGroup).
See Also:
/** * An item view type that causes the {@link AdapterView} to ignore the item * view. For example, this can be used if the client does not want a * particular view to be given for conversion in * {@link #getView(int, View, ViewGroup)}. * * @see #getItemViewType(int) * @see #getViewTypeCount() */
static final int IGNORE_ITEM_VIEW_TYPE = AdapterView.ITEM_VIEW_TYPE_IGNORE;
Get the type of View that will be created by getView for the specified item.
Params:
  • position – The position of the item within the adapter's data set whose view type we want.
See Also:
Returns:An integer representing the type of View. Two views should share the same type if one can be converted to the other in getView. Note: Integers must be in the range 0 to getViewTypeCount - 1. IGNORE_ITEM_VIEW_TYPE can also be returned.
/** * Get the type of View that will be created by {@link #getView} for the specified item. * * @param position The position of the item within the adapter's data set whose view type we * want. * @return An integer representing the type of View. Two views should share the same type if one * can be converted to the other in {@link #getView}. Note: Integers must be in the * range 0 to {@link #getViewTypeCount} - 1. {@link #IGNORE_ITEM_VIEW_TYPE} can * also be returned. * @see #IGNORE_ITEM_VIEW_TYPE */
int getItemViewType(int position);

Returns the number of types of Views that will be created by getView. Each type represents a set of views that can be converted in getView. If the adapter always returns the same type of View for all items, this method should return 1.

This method will only be called when the adapter is set on the AdapterView.

Returns:The number of types of Views that will be created by this adapter
/** * <p> * Returns the number of types of Views that will be created by * {@link #getView}. Each type represents a set of views that can be * converted in {@link #getView}. If the adapter always returns the same * type of View for all items, this method should return 1. * </p> * <p> * This method will only be called when the adapter is set on the {@link AdapterView}. * </p> * * @return The number of types of Views that will be created by this adapter */
int getViewTypeCount(); static final int NO_SELECTION = Integer.MIN_VALUE;
Returns:true if this adapter doesn't contain any data. This is used to determine whether the empty view should be displayed. A typical implementation will return getCount() == 0 but since getCount() includes the headers and footers, specialized adapters might want a different behavior.
/** * @return true if this adapter doesn't contain any data. This is used to determine * whether the empty view should be displayed. A typical implementation will return * getCount() == 0 but since getCount() includes the headers and footers, specialized * adapters might want a different behavior. */
boolean isEmpty();
Gets a string representation of the adapter data that can help AutofillService autofill the view backed by the adapter.

It should only be set (i.e., non-null if the values do not represent PII (Personally Identifiable Information - sensitive data such as email addresses, credit card numbers, passwords, etc...). For example, it's ok to return a list of month names, but not a list of usernames. A good rule of thumb is that if the adapter data comes from static resources, such data is not PII - see ViewStructure.setDataIsSensitive(boolean) for more info.

Returns:null by default, unless implementations override it.
/** * Gets a string representation of the adapter data that can help * {@link android.service.autofill.AutofillService} autofill the view backed by the adapter. * * <p> * It should only be set (i.e., non-{@code null} if the values do not represent PII * (Personally Identifiable Information - sensitive data such as email addresses, * credit card numbers, passwords, etc...). For * example, it's ok to return a list of month names, but not a list of usernames. A good rule of * thumb is that if the adapter data comes from static resources, such data is not PII - see * {@link android.view.ViewStructure#setDataIsSensitive(boolean)} for more info. * * @return {@code null} by default, unless implementations override it. */
default @Nullable CharSequence[] getAutofillOptions() { return null; } }