我正在试图找出如何设置列表中的ratingbar的值,但还没有找到答案。
我正在使用一个简单的适配器来设置文本。
其中mylist是hashmap。

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>

当我试图将“rating”添加到简单适配器时,会出现此错误。
ERROR/AndroidRuntime(10793): java.lang.IllegalStateException: android.widget.RatingBar is not a  view that can be bounds by this SimpleAdapter

我找不到任何有用的信息。任何帮助或指导都是非常感谢的。

最佳答案

您可以将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
我想我们不需要创建自定义列表适配器。

10-08 14:43