【问题标题】:Android: How can you set the value of a ratingBar within a ListAdapter?Android:如何在 ListAdapter 中设置 ratingBar 的值?
【发布时间】:2011-09-11 20:01:54
【问题描述】:

我试图弄清楚如何设置列表中 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

我还没有找到任何有用的东西。非常感谢任何帮助或指导。

【问题讨论】:

  • 运气好吗?可能需要一个自定义列表适配器。
  • 我也在想同样的事情,但还没试过
  • 我必须制作一个扩展 simpleadapter 的自定义适配器

标签: android simpleadapter


【解决方案1】:

您可以将 SimpleAdapter.ViewBinder 用作 Activity 中的私有类

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

我想我们不需要创建自定义列表适配器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-27
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    相关资源
    最近更新 更多