2011-09-11 10 views
2

私はリストにあるratingBarの値を設定する方法を理解しようとしていますが、それを理解することはできませんでした。Android:ListAdapter内でratingBarの値を設定するにはどうすればよいですか?

私は現在、テキストを設定するために簡単なアダプタを使用しています。

マイリストはハッシュマップです。

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

をSimpleAdapter.ViewBinderを使用することができます。

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

ビューへのデータのバインドは2つのフェーズで行われます。まず、SimpleAdapter.ViewBinderが利用可能であれば、setViewValue(android.view.View, Object, String)が呼び出されます。戻り値がtrueの場合、バインディングが発生しています。戻り値がfalseの場合、ビューはSimpleAdapterによって順番に試行されます。

これに関する詳細情報については、私は、我々はカスタムリストアダプタを作成する必要はありません推測SimpleAdapter

を閲覧することができます。

関連する問題