2

リストにある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

私はこれに関して有用なものを見つけることができませんでした。どんな助けや指示も大歓迎です。

4

1 に答える 1

4

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

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

詳細については、SimpleAdapterを参照してください。

カスタムリストアダプタを作成する必要はないと思います。

于 2012-07-03T09:19:39.520 に答える