2011-12-14 66 views
10

你可以通过imageviewtextview为中的一行进行布局查看吗?带有ImageView和TextView的SimpleCursorAdapter

这将是布局

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

能将它SimpleCursorAdapter做一个列表视图?当我需要在列表视图中的图像时,我总是使用自定义的数组适配器,但从来没有使用游标。

如果可以完成,我将如何设置图像?

回答

23

当绑定视图是ImageView并且不存在ViewBinder关联SimpleCursorAdapter.bindView()调用setViewImage(ImageView, String)。 默认情况下,该值将被视为图像资源。如果该值不能用作图像资源,则该值将用作图像Uri

如果需要其他的方式来过滤从数据库中检索你需要一个ViewBinder添加到ListAdapter如下价值:

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

...或覆盖setViewImage – Selvin 2011-12-14 20:05:07

0

为了从@Francesco Vadicamo答案扩大,这是一个作为更大活动的一部分的功能。我将它分开,因为我需要从代码的多个区域调用它。 databaseHandlerlistView被定义为类变量并在onCreat()中初始化。

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); 
} 
相关问题