2011-09-11 17 views
2

我想弄清楚如何設置列表中的ratingBar的值,但一直未能弄清楚。Android:如何設置ListAdapter中的ratingBar的值?

我目前使用一個簡單的適配器來設置文本。

其中mylist是一個散列表。

ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.list_simple, 
          new String[] { "name"}, 
          new int[] { R.id.item_title}); 

setListAdapter(adapter); 

而且我的XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    android:background="@color/white"> 


    <TextView 
    style="@style/ListHeading" 
    android:id="@+id/item_title" 
    android:gravity="left"/> 

    <RatingBar 
    style="@style/RatingBarSm" 
    android:id="@+id/ratingBar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:isIndicator="true"/>   

</LinearLayout> 

當我嘗試 「評級」 添加到簡單的適配器,我得到這個錯誤。

ERROR/AndroidRuntime(10793): java.lang.IllegalStateException: android.widget.RatingBar is not a view that can be bounds by this SimpleAdapter 

我一直沒能找到有用的東西。任何幫助或方向,不勝感激。

+0

運氣好嗎?可能需要一個自定義列表適配器。 –

+0

我在想同樣的事情,但還沒有嘗試過 – user401183

+0

我不得不製作一個自定義的適配器來擴展simpleadapter – user401183

回答

3

您可以使用SimpleAdapter.ViewBinder作爲一個私有類活動

class MyBinder implements ViewBinder{ 
    @Override 
    public boolean setViewValue(View view, Object data, String textRepresentation) { 
     if(view.getId() == R.id.ratingBar){ 
      String stringval = (String) data; 
      float ratingValue = Float.parseFloat(stringval); 
      RatingBar ratingBar = (RatingBar) view; 
      ratingBar.setRating(ratingValue); 
      return true; 
     } 
     return false; 
    } 
} 

內然後您可以將ViewBinder設置爲SimpleAdapter以下方式。

ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.list_simple, 
new String[] { "name", "rating"}, 
new int[] { R.id.item_title, R.id.ratingBar}); 
adapter.setViewBinder(new MyBinder()); 
setListAdapter(adapter); 

將數據綁定到視圖分兩個階段進行。首先,如果SimpleAdapter.ViewBinder可用,則調用setViewValue(android.view.View, Object, String)。如果返回值爲true,則發生綁定。如果返回的值爲false,則視圖將按順序由SimpleAdapter嘗試。

有關此的詳細信息,你可以瀏覽SimpleAdapter

我想我們不必創建自定義列表適配器。