Pregunta

I'm trying to bind data from a MySQL database via PHP to an Android RatingBar in a ListView. With SQLite I could just use a SimpleCursorAdapter, but since PHP returns a JSONArray I loaded the data into a HashMap and cannot figure out how to bind that data to the RatingBar. I already tried this code:

class MyBinder implements ViewBinder{
 @Override
 public boolean setViewValue(View view, String data, String textRepresentation) {
if(view.getId() == R.id.ratingBar){
    String stringval = data;
    float ratingValue = Float.parseFloat(stringval);
    RatingBar ratingBar = (RatingBar) view;
    ratingBar.setRating(ratingValue);
    return true;
   }
  return false;
   }
}


        ListAdapter simpleadapter = new   SimpleAdapter(getApplicationContext(), values, R.layout.review_info, columns, toView);
        simpleadapter.setViewBinder(new MyBinder());
        listview.setAdapter(simpleadapter);

Unfortunately, I get a compile-time error saying that setViewBinder is not a method in ListAdapter and suggests I cast it as a SimpleCursorAdapter. So how can I bind data without a cursor? Or how can I get a cursor from MySQL? Thanks

Final WORKING code:

    public class MyArrayAdapter extends ArrayAdapter<Locations>{
Context context;
ArrayList<Locations> data;
int resource;




public MyArrayAdapter(Context context, int resource, ArrayList<Locations> data
    ) {
    super(context, resource, data);
    this.context = context;
    this.data = data;
    this.resource = resource;
}



  static class ViewHolder {
    public TextView text;
    public RatingBar ratingbar;
  }



  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    View rowView = convertView;
    ViewHolder viewHolder;
    Locations l = data.get(position);

    if (rowView == null)
  {
    viewHolder = new ViewHolder();
    LayoutInflater inflater = (LayoutInflater)        context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  //get review_info which is the info inside list_review
  rowView = inflater.inflate(R.layout.review_info, null);
  viewHolder.text = (TextView) rowView.findViewById(R.id.displayReview);
  viewHolder. ratingbar = (RatingBar) rowView.findViewById(R.id.ratingReview);
  rowView.setTag(viewHolder); 


}
else
{
    viewHolder = (ViewHolder) rowView.getTag();
}

viewHolder.text.setText(l.getReview());
viewHolder.ratingbar.setRating(l.getClean());

   return rowView;
    }
 } 
¿Fue útil?

Solución

You bind your data while building row view, in getView() method of the adapter:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top