FileDocCategorySizeDatePackage
CursorAdapter.javaAPI DocAndroid 1.5 API12849Wed May 06 22:41:56 BST 2009android.widget

CursorAdapter

public abstract class CursorAdapter extends BaseAdapter implements Filterable, CursorFilter.CursorFilterClient
Adapter that exposes data from a {@link android.database.Cursor Cursor} to a {@link android.widget.ListView ListView} widget. The Cursor must include a column named "_id" or this class will not work.

Fields Summary
protected boolean
mDataValid
This field should be made private, so it is hidden from the SDK. {@hide}
protected boolean
mAutoRequery
This field should be made private, so it is hidden from the SDK. {@hide}
protected android.database.Cursor
mCursor
This field should be made private, so it is hidden from the SDK. {@hide}
protected android.content.Context
mContext
This field should be made private, so it is hidden from the SDK. {@hide}
protected int
mRowIDColumn
This field should be made private, so it is hidden from the SDK. {@hide}
protected ChangeObserver
mChangeObserver
This field should be made private, so it is hidden from the SDK. {@hide}
protected android.database.DataSetObserver
mDataSetObserver
This field should be made private, so it is hidden from the SDK. {@hide}
protected CursorFilter
mCursorFilter
This field should be made private, so it is hidden from the SDK. {@hide}
protected FilterQueryProvider
mFilterQueryProvider
This field should be made private, so it is hidden from the SDK. {@hide}
Constructors Summary
public CursorAdapter(android.content.Context context, android.database.Cursor c)
Constructor. The adapter will call requery() on the cursor whenever it changes so that the most recent data is always displayed.

param
c The cursor from which to get the data.
param
context The context


                                            
         
        init(context, c, true);
    
public CursorAdapter(android.content.Context context, android.database.Cursor c, boolean autoRequery)
Constructor

param
c The cursor from which to get the data.
param
context The context
param
autoRequery If true the adapter will call requery() on the cursor whenever it changes so the most recent data is always displayed.

        init(context, c, autoRequery);
    
Methods Summary
public abstract voidbindView(android.view.View view, android.content.Context context, android.database.Cursor cursor)
Bind an existing view to the data pointed to by cursor

param
view Existing view, returned earlier by newView
param
context Interface to application's global information
param
cursor The cursor from which to get the data. The cursor is already moved to the correct position.

public voidchangeCursor(android.database.Cursor cursor)
Change the underlying cursor to a new cursor. If there is an existing cursor it will be closed.

param
cursor the new cursor to be used

        if (cursor == mCursor) {
            return;
        }
        if (mCursor != null) {
            mCursor.unregisterContentObserver(mChangeObserver);
            mCursor.unregisterDataSetObserver(mDataSetObserver);
            mCursor.close();
        }
        mCursor = cursor;
        if (cursor != null) {
            cursor.registerContentObserver(mChangeObserver);
            cursor.registerDataSetObserver(mDataSetObserver);
            mRowIDColumn = cursor.getColumnIndexOrThrow("_id");
            mDataValid = true;
            // notify the observers about the new cursor
            notifyDataSetChanged();
        } else {
            mRowIDColumn = -1;
            mDataValid = false;
            // notify the observers about the lack of a data set
            notifyDataSetInvalidated();
        }
    
public java.lang.CharSequenceconvertToString(android.database.Cursor cursor)

Converts the cursor into a CharSequence. Subclasses should override this method to convert their results. The default implementation returns an empty String for null values or the default String representation of the value.

param
cursor the cursor to convert to a CharSequence
return
a CharSequence representing the value

        return cursor == null ? "" : cursor.toString();
    
public intgetCount()

see
android.widget.ListAdapter#getCount()

        if (mDataValid && mCursor != null) {
            return mCursor.getCount();
        } else {
            return 0;
        }
    
public android.database.CursorgetCursor()
Returns the cursor.

return
the cursor.

        return mCursor;
    
public android.view.ViewgetDropDownView(int position, android.view.View convertView, android.view.ViewGroup parent)

        if (mDataValid) {
            mCursor.moveToPosition(position);
            View v;
            if (convertView == null) {
                v = newDropDownView(mContext, mCursor, parent);
            } else {
                v = convertView;
            }
            bindView(v, mContext, mCursor);
            return v;
        } else {
            return null;
        }
    
public FiltergetFilter()

        if (mCursorFilter == null) {
            mCursorFilter = new CursorFilter(this);
        }
        return mCursorFilter;
    
public FilterQueryProvidergetFilterQueryProvider()
Returns the query filter provider used for filtering. When the provider is null, no filtering occurs.

return
the current filter query provider or null if it does not exist
see
#setFilterQueryProvider(android.widget.FilterQueryProvider)
see
#runQueryOnBackgroundThread(CharSequence)

        return mFilterQueryProvider;
    
public java.lang.ObjectgetItem(int position)

see
android.widget.ListAdapter#getItem(int)

        if (mDataValid && mCursor != null) {
            mCursor.moveToPosition(position);
            return mCursor;
        } else {
            return null;
        }
    
public longgetItemId(int position)

see
android.widget.ListAdapter#getItemId(int)

        if (mDataValid && mCursor != null) {
            if (mCursor.moveToPosition(position)) {
                return mCursor.getLong(mRowIDColumn);
            } else {
                return 0;
            }
        } else {
            return 0;
        }
    
public android.view.ViewgetView(int position, android.view.View convertView, android.view.ViewGroup parent)

see
android.widget.ListAdapter#getView(int, View, ViewGroup)

        if (!mDataValid) {
            throw new IllegalStateException("this should only be called when the cursor is valid");
        }
        if (!mCursor.moveToPosition(position)) {
            throw new IllegalStateException("couldn't move cursor to position " + position);
        }
        View v;
        if (convertView == null) {
            v = newView(mContext, mCursor, parent);
        } else {
            v = convertView;
        }
        bindView(v, mContext, mCursor);
        return v;
    
public booleanhasStableIds()

        return true;
    
protected voidinit(android.content.Context context, android.database.Cursor c, boolean autoRequery)

        boolean cursorPresent = c != null;
        mAutoRequery = autoRequery;
        mCursor = c;
        mDataValid = cursorPresent;
        mContext = context;
        mRowIDColumn = cursorPresent ? c.getColumnIndexOrThrow("_id") : -1;
        mChangeObserver = new ChangeObserver();
        if (cursorPresent) {
            c.registerContentObserver(mChangeObserver);
            c.registerDataSetObserver(mDataSetObserver);
        }
    
public android.view.ViewnewDropDownView(android.content.Context context, android.database.Cursor cursor, android.view.ViewGroup parent)
Makes a new drop down view to hold the data pointed to by cursor.

param
context Interface to application's global information
param
cursor The cursor from which to get the data. The cursor is already moved to the correct position.
param
parent The parent to which the new view is attached to
return
the newly created view.

        return newView(context, cursor, parent);
    
public abstract android.view.ViewnewView(android.content.Context context, android.database.Cursor cursor, android.view.ViewGroup parent)
Makes a new view to hold the data pointed to by cursor.

param
context Interface to application's global information
param
cursor The cursor from which to get the data. The cursor is already moved to the correct position.
param
parent The parent to which the new view is attached to
return
the newly created view.

protected voidonContentChanged()
Called when the {@link ContentObserver} on the cursor receives a change notification. The default implementation provides the auto-requery logic, but may be overridden by sub classes.

see
ContentObserver#onChange(boolean)

        if (mAutoRequery && mCursor != null && !mCursor.isClosed()) {
            if (Config.LOGV) Log.v("Cursor", "Auto requerying " + mCursor + " due to update");
            mDataValid = mCursor.requery();
        }
    
public android.database.CursorrunQueryOnBackgroundThread(java.lang.CharSequence constraint)
Runs a query with the specified constraint. This query is requested by the filter attached to this adapter. The query is provided by a {@link android.widget.FilterQueryProvider}. If no provider is specified, the current cursor is not filtered and returned. After this method returns the resulting cursor is passed to {@link #changeCursor(Cursor)} and the previous cursor is closed. This method is always executed on a background thread, not on the application's main thread (or UI thread.) Contract: when constraint is null or empty, the original results, prior to any filtering, must be returned.

param
constraint the constraint with which the query must be filtered
return
a Cursor representing the results of the new query
see
#getFilter()
see
#getFilterQueryProvider()
see
#setFilterQueryProvider(android.widget.FilterQueryProvider)

        if (mFilterQueryProvider != null) {
            return mFilterQueryProvider.runQuery(constraint);
        }

        return mCursor;
    
public voidsetFilterQueryProvider(FilterQueryProvider filterQueryProvider)
Sets the query filter provider used to filter the current Cursor. The provider's {@link android.widget.FilterQueryProvider#runQuery(CharSequence)} method is invoked when filtering is requested by a client of this adapter.

param
filterQueryProvider the filter query provider or null to remove it
see
#getFilterQueryProvider()
see
#runQueryOnBackgroundThread(CharSequence)

        mFilterQueryProvider = filterQueryProvider;