Android: Как вы можете установить значение RatingBar в ListAdapter? - PullRequest
2 голосов
/ 12 сентября 2011

Я пытаюсь выяснить, как установить значение 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

Я не смог найти ничего полезного по этому поводу. Любая помощь или направление очень ценится.

1 Ответ

4 голосов
/ 03 июля 2012

Вы можете использовать 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

Полагаю, нам не нужно создавать собственный адаптер списка.

...