我正在试图弄清楚如何设置列表中的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>
当我尝试将“rating”添加到简单适配器时,我收到此错误。
ERROR/AndroidRuntime(10793): java.lang.IllegalStateException: android.widget.RatingBar is not a view that can be bounds by this SimpleAdapter
我一直无法找到有用的东西。非常感谢任何帮助或指导。
答案 0 :(得分: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);
将数据绑定到视图分两个阶段进行。首先,如果SimpleAdapter.ViewBinder
可用,则调用setViewValue(android.view.View, Object, String)
。如果返回值为true,则发生绑定。如果返回的值为false,则SimpleAdapter将按顺序尝试视图。
有关此内容的更多信息,您可以浏览SimpleAdapter
我想我们不需要创建自定义列表适配器。