FileDocCategorySizeDatePackage
SimpleCursorAdapter.javaAPI DocAndroid 1.5 API16448Wed May 06 22:41:56 BST 2009android.widget

SimpleCursorAdapter

public class SimpleCursorAdapter extends ResourceCursorAdapter
An easy adapter to map columns from a cursor to TextViews or ImageViews defined in an XML file. You can specify which columns you want, which views you want to display the columns, and the XML file that defines the appearance of these views. Binding occurs in two phases. First, if a {@link android.widget.SimpleCursorAdapter.ViewBinder} is available, {@link ViewBinder#setViewValue(android.view.View, android.database.Cursor, int)} is invoked. If the returned value is true, binding has occured. If the returned value is false and the view to bind is a TextView, {@link #setViewText(TextView, String)} is invoked. If the returned value is false and the view to bind is an ImageView, {@link #setViewImage(ImageView, String)} is invoked. If no appropriate binding can be found, an {@link IllegalStateException} is thrown. If this adapter is used with filtering, for instance in an {@link android.widget.AutoCompleteTextView}, you can use the {@link android.widget.SimpleCursorAdapter.CursorToStringConverter} and the {@link android.widget.FilterQueryProvider} interfaces to get control over the filtering process. You can refer to {@link #convertToString(android.database.Cursor)} and {@link #runQueryOnBackgroundThread(CharSequence)} for more information.

Fields Summary
protected int[]
mFrom
A list of columns containing the data to bind to the UI. This field should be made private, so it is hidden from the SDK. {@hide}
protected int[]
mTo
A list of View ids representing the views to which the data must be bound. This field should be made private, so it is hidden from the SDK. {@hide}
private int
mStringConversionColumn
private CursorToStringConverter
mCursorToStringConverter
private ViewBinder
mViewBinder
private String[]
mOriginalFrom
Constructors Summary
public SimpleCursorAdapter(android.content.Context context, int layout, android.database.Cursor c, String[] from, int[] to)
Constructor.

param
context The context where the ListView associated with this SimpleListItemFactory is running
param
layout resource identifier of a layout file that defines the views for this list item. Thelayout file should include at least those named views defined in "to"
param
c The database cursor. Can be null if the cursor is not available yet.
param
from A list of column names representing the data to bind to the UI. Can be null if the cursor is not available yet.
param
to The views that should display column in the "from" parameter. These should all be TextViews. The first N views in this list are given the values of the first N columns in the from parameter. Can be null if the cursor is not available yet.


                                                                                                                                                                                                                            
               
        super(context, layout, c);
        mTo = to;
        mOriginalFrom = from;
        findColumns(from);
    
Methods Summary
public voidbindView(android.view.View view, android.content.Context context, android.database.Cursor cursor)
Binds all of the field names passed into the "to" parameter of the constructor with their corresponding cursor columns as specified in the "from" parameter. Binding occurs in two phases. First, if a {@link android.widget.SimpleCursorAdapter.ViewBinder} is available, {@link ViewBinder#setViewValue(android.view.View, android.database.Cursor, int)} is invoked. If the returned value is true, binding has occured. If the returned value is false and the view to bind is a TextView, {@link #setViewText(TextView, String)} is invoked. If the returned value is false and the view to bind is an ImageView, {@link #setViewImage(ImageView, String)} is invoked. If no appropriate binding can be found, an {@link IllegalStateException} is thrown.

throws
IllegalStateException if binding cannot occur
see
android.widget.CursorAdapter#bindView(android.view.View, android.content.Context, android.database.Cursor)
see
#getViewBinder()
see
#setViewBinder(android.widget.SimpleCursorAdapter.ViewBinder)
see
#setViewImage(ImageView, String)
see
#setViewText(TextView, String)

        final View[] holder = (View[]) view.getTag();
        final ViewBinder binder = mViewBinder;
        final int count = mTo.length;
        final int[] from = mFrom;

        for (int i = 0; i < count; i++) {
            final View v = holder[i];
            if (v != null) {
                String text = cursor.getString(from[i]);
                if (text == null) {
                    text = "";
                }

                boolean bound = false;
                if (binder != null) {
                    bound = binder.setViewValue(v, cursor, from[i]);
                }

                if (!bound) {
                    if (v instanceof TextView) {
                        setViewText((TextView) v, text);
                    } else if (v instanceof ImageView) {
                        setViewImage((ImageView) v, text);
                    } else {
                        throw new IllegalStateException(v.getClass().getName() + " is not a " +
                                " view that can be bounds by this SimpleCursorAdapter");
                    }
                }
            }
        }
    
public voidchangeCursor(android.database.Cursor c)

        super.changeCursor(c);
        // rescan columns in case cursor layout is different
        findColumns(mOriginalFrom);
    
public voidchangeCursorAndColumns(android.database.Cursor c, java.lang.String[] from, int[] to)
Change the cursor and change the column-to-view mappings at the same time.

param
c The database cursor. Can be null if the cursor is not available yet.
param
from A list of column names representing the data to bind to the UI. Can be null if the cursor is not available yet.
param
to The views that should display column in the "from" parameter. These should all be TextViews. The first N views in this list are given the values of the first N columns in the from parameter. Can be null if the cursor is not available yet.

        mOriginalFrom = from;
        mTo = to;
        super.changeCursor(c);        
        findColumns(mOriginalFrom);
    
public java.lang.CharSequenceconvertToString(android.database.Cursor cursor)
Returns a CharSequence representation of the specified Cursor as defined by the current CursorToStringConverter. If no CursorToStringConverter has been set, the String conversion column is used instead. If the conversion column is -1, the returned String is empty if the cursor is null or Cursor.toString().

param
cursor the Cursor to convert to a CharSequence
return
a non-null CharSequence representing the cursor

        if (mCursorToStringConverter != null) {
            return mCursorToStringConverter.convertToString(cursor);
        } else if (mStringConversionColumn > -1) {
            return cursor.getString(mStringConversionColumn);
        }

        return super.convertToString(cursor);
    
private voidfindColumns(java.lang.String[] from)
Create a map from an array of strings to an array of column-id integers in mCursor. If mCursor is null, the array will be discarded.

param
from the Strings naming the columns of interest

        if (mCursor != null) {
            int i;
            int count = from.length;
            if (mFrom == null || mFrom.length != count) {
                mFrom = new int[count];
            }
            for (i = 0; i < count; i++) {
                mFrom[i] = mCursor.getColumnIndexOrThrow(from[i]);
            }
        } else {
            mFrom = null;
        }
    
private android.view.ViewgenerateViewHolder(android.view.View v)

        final int[] to = mTo;
        final int count = to.length;
        final View[] holder = new View[count];

        for (int i = 0; i < count; i++) {
            holder[i] = v.findViewById(to[i]);
        }
        v.setTag(holder);

        return v;
    
public android.widget.SimpleCursorAdapter$CursorToStringConvertergetCursorToStringConverter()
Returns the converter used to convert the filtering Cursor into a String.

return
null if the converter does not exist or an instance of {@link android.widget.SimpleCursorAdapter.CursorToStringConverter}
see
#setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)
see
#getStringConversionColumn()
see
#setStringConversionColumn(int)
see
android.widget.CursorAdapter#convertToString(android.database.Cursor)

        return mCursorToStringConverter;
    
public intgetStringConversionColumn()
Return the index of the column used to get a String representation of the Cursor.

return
a valid index in the current Cursor or -1
see
android.widget.CursorAdapter#convertToString(android.database.Cursor)
see
#setStringConversionColumn(int)
see
#setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)
see
#getCursorToStringConverter()

        return mStringConversionColumn;
    
public android.widget.SimpleCursorAdapter$ViewBindergetViewBinder()
Returns the {@link ViewBinder} used to bind data to views.

return
a ViewBinder or null if the binder does not exist
see
#bindView(android.view.View, android.content.Context, android.database.Cursor)
see
#setViewBinder(android.widget.SimpleCursorAdapter.ViewBinder)

        return mViewBinder;
    
public android.view.ViewnewDropDownView(android.content.Context context, android.database.Cursor cursor, android.view.ViewGroup parent)

        return generateViewHolder(super.newDropDownView(context, cursor, parent));
    
public android.view.ViewnewView(android.content.Context context, android.database.Cursor cursor, android.view.ViewGroup parent)

        return generateViewHolder(super.newView(context, cursor, parent));
    
public voidsetCursorToStringConverter(android.widget.SimpleCursorAdapter$CursorToStringConverter cursorToStringConverter)
Sets the converter used to convert the filtering Cursor into a String.

param
cursorToStringConverter the Cursor to String converter, or null to remove the converter
see
#setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)
see
#getStringConversionColumn()
see
#setStringConversionColumn(int)
see
android.widget.CursorAdapter#convertToString(android.database.Cursor)

        mCursorToStringConverter = cursorToStringConverter;
    
public voidsetStringConversionColumn(int stringConversionColumn)
Defines the index of the column in the Cursor used to get a String representation of that Cursor. The column is used to convert the Cursor to a String only when the current CursorToStringConverter is null.

param
stringConversionColumn a valid index in the current Cursor or -1 to use the default conversion mechanism
see
android.widget.CursorAdapter#convertToString(android.database.Cursor)
see
#getStringConversionColumn()
see
#setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)
see
#getCursorToStringConverter()

        mStringConversionColumn = stringConversionColumn;
    
public voidsetViewBinder(android.widget.SimpleCursorAdapter$ViewBinder viewBinder)
Sets the binder used to bind data to views.

param
viewBinder the binder used to bind data to views, can be null to remove the existing binder
see
#bindView(android.view.View, android.content.Context, android.database.Cursor)
see
#getViewBinder()

        mViewBinder = viewBinder;
    
public voidsetViewImage(ImageView v, java.lang.String value)
Called by bindView() to set the image for an ImageView but only if there is no existing ViewBinder or if the existing ViewBinder cannot handle binding to an ImageView. By default, the value will be treated as an image resource. If the value cannot be used as an image resource, the value is used as an image Uri. Intended to be overridden by Adapters that need to filter strings retrieved from the database.

param
v ImageView to receive an image
param
value the value retrieved from the cursor

        try {
            v.setImageResource(Integer.parseInt(value));
        } catch (NumberFormatException nfe) {
            v.setImageURI(Uri.parse(value));
        }
    
public voidsetViewText(TextView v, java.lang.String text)
Called by bindView() to set the text for a TextView but only if there is no existing ViewBinder or if the existing ViewBinder cannot handle binding to an TextView. Intended to be overridden by Adapters that need to filter strings retrieved from the database.

param
v TextView to receive text
param
text the text to be set for the TextView

        v.setText(text);