2011-09-11 3 views
2

목록에있는 ratingBar의 값을 설정하는 방법을 알아 내려했지만이를 파악하지 못했습니다.Android : ListAdapter에서 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 

나는 이것에 유용한 것을 찾을 수 없었습니다. 어떤 도움이나 방향을 크게 주시면 감사하겠습니다.

+0

행운이 있습니까? 아마도 맞춤 목록 어댑터가 필요할 것입니다. –

+0

나는 똑같은 생각을하고있다. 그러나 아직 시도하지 않았다. – user401183

+0

확장 된 simpleadapter라는 맞춤형 어댑터를 만들어야했다. – user401183

답변

3

당신은 그럼 당신은 다음과 같은 방식으로 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; 
    } 
} 

내에서 개인 클래스로 SimpleAdapter.ViewBinder를 사용할 수 있습니다.

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

를 검색 할 수 있습니다.

관련 문제