Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SimpleCursorAdapter with ImageView and TextView

can you have a layout with an imageview and textview for a row in a SimpleCursorAdapter with a listview?

this would be the layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<ImageView
    android:id="@+id/icon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<TextView
    android:id="@+id/bowler_txt"
    android:paddingLeft="25dp"
    android:textSize="30dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Bowler"
    android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

can it be done in SimpleCursorAdapter with a listview? when I needed images in a listview I always used a custom arrayadapter but never with a cursor.

How would I set the image if it can be done?

like image 695
tyczj Avatar asked Dec 14 '11 19:12

tyczj


1 Answers

When the view to bind is an ImageView and there is no existing ViewBinder associated SimpleCursorAdapter.bindView() calls setViewImage(ImageView, String). 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.

If you need to filter in other ways the value retrieved from the database you need a ViewBinder to add to the ListAdapter as follow:

listAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder(){
   /** Binds the Cursor column defined by the specified index to the specified view */
   public boolean setViewValue(View view, Cursor cursor, int columnIndex){
       if(view.getId() == R.id.your_image_view_id){
           //...
           ((ImageView)view).setImageDrawable(...);
           return true; //true because the data was bound to the view
       }
       return false;
   }
});
like image 67
Francesco Vadicamo Avatar answered Oct 12 '22 08:10

Francesco Vadicamo