2011-12-14 19 views
10

, SimpleCursorAdapter listesindeki bir satır için imageview ve textview ile bir düzeniniz var mı?ImageView ve TextView ile SimpleCursorAdapter

bu düzen olurdu

<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> 

bir liste görünümü ile SimpleCursorAdapter yapılabilir ? Bir liste görünümünde görüntülere ihtiyacım olduğunda, her zaman özel bir arrayadapter kullandım ama hiçbir zaman bir imleç kullanmamıştım.

Eğer yapılabilirse resmi nasıl ayarlayabilirim?

cevap

23

Bağlanacak görünüm bir ImageView olduğunda ve setViewImage(ImageView, String) numaralı setViewImage(ImageView, String) numaralı arama var. Varsayılan olarak, değer bir görüntü kaynağı olarak değerlendirilecektir. Değer bir görüntü kaynağı olarak kullanılamazsa, değer görüntü Uri olarak kullanılır. Başka yollarla size aşağıdaki gibi ListAdapter eklemek için bir ViewBinder ihtiyaç veritabanından alınan değeri filtrelemek gerekiyorsa

:

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; 
    } 
}); 
+5

... veya geçersiz kılma setViewImage – Selvin

0

@Francesco Vadicamo gelen yanıta genişletmek için, bu bir Daha büyük bir faaliyetin parçası olan hareketler. Onu ayırdım, çünkü kodun birden çok alanından aramam gerekiyordu. databaseHandler ve listView, sınıf değişkenleri olarak tanımlanır ve onCreat()'da başlatılır.

private void updateListView() { 
    // Get a Cursor with the current contents of the database. 
    final Cursor cursor = databaseHandler.getCursor(); 

    // The last argument is 0 because no special behavior is required. 
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
      R.layout.listview, 
      cursor, 
      new String[] { databaseHandler.ICON, databaseHandler.BOWLER_TXT }, 
      new int[] { R.id.icon, R.id.bowler_txt }, 
      0); 

    // Override the handling of R.id.icon to load an image instead of a string. 
    adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { 
     public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
      if (view.getId() == R.id.imageview) { 
       // Get the byte array from the database. 
       byte[] iconByteArray = cursor.getBlob(columnIndex); 

       // Convert the byte array to a Bitmap beginning at the first byte and ending at the last. 
       Bitmap iconBitmap = BitmapFactory.decodeByteArray(iconByteArray, 0, iconByteArray.length); 

       // Set the bitmap. 
       ImageView iconImageView = (ImageView) view; 
       iconImageView.setImageBitmap(iconBitmap); 
       return true; 
      } else { // Process the rest of the adapter with default settings. 
       return false; 
      } 
     } 
    }); 

    // Update the ListView. 
    listView.setAdapter(adapter); 
}