【问题标题】:Android bind data to ListView without cursorAndroid将数据绑定到没有光标的ListView
【发布时间】:2013-06-30 20:21:19
【问题描述】:

我正在尝试通过 PHP 将 MySQL 数据库中的数据绑定到 ListView 中的 Android RatingBar。使用 SQLite,我可以只使用 SimpleCursorAdapter,但由于 PHP 返回 JSONArray,我将数据加载到 HashMap 中,无法弄清楚如何将该数据绑定到 RatingBar。我已经尝试过这段代码:

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);

不幸的是,我收到一个编译时错误,指出 setViewBinder 不是 ListAdapter 中的方法,并建议我将其转换为 SimpleCursorAdapter。那么如何在没有游标的情况下绑定数据呢?或者如何从 MySQL 获取游标?谢谢

最终工作代码:

    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;
    }
 } 

【问题讨论】:

    标签: android sql listview simpleadapter


    【解决方案1】:

    您在构建行视图时绑定数据,在适配器的getView() 方法中:

    【讨论】:

    • 谢谢我无法用 getView() 解决问题。现在我遇到了一个新错误,不知道为什么。我在 UPDATE 下发布了所有内容。谢谢
    • R.layout.review_info 中有什么内容?
    • 嘿,现在似乎可以工作了。我看了这个视频:youtube.com/watch?v=wDBM6wVEO70&feature=youtu.be
    • getView() 是答案,但该视频帮助我理解。我在底部发布了正确的代码。
    猜你喜欢
    • 2011-10-17
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2014-05-07
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    相关资源
    最近更新 更多