使用ViewBinder在ListView上设置ImageView,具体取决于RatingBar值

时间:2013-05-21 09:15:01

标签: android listview imageview android-viewbinder ratingbar

我在MainActivity中有一个ListView,它显示了我用SimpleCursorAdapter填充的电影列表。 在另一个活动中,用户可以使用RatingBar设置评级,并且浮点值保存在数据库中。 我想在电影名称旁边的MainActivity上显示,在其他活动中设置评级。

我尝试仅使用另一个RatingBar作为指标并设置它但它不起作用。 我尝试使用五个不可见的图像视图(星星),根据浮动值变得可见,但它不起作用。 现在我正在尝试使用viewbinder,使用if语句:从数据库中获取评级栏的浮点值,将其解析为Int并将右侧drawable设置为Imageview。

LogCat中没有错误,但imageview根本没有变化...... 也许我刷新清单时错了?我是一位公主,请帮助我:) 我做错了什么???????

//这是我的主要活动:

公共类MainActivity扩展ListActivity实现OnItemClickListener {

public static final int ADD_MANUAL = 1;

private Cursor cursor;
private MoviesHandler db;
private String [] cols = new String [] {MoviesDbConstants.MOVIE_TITLE ,    MoviesDbConstants.MOVIE_URI};
private int [] views = new int [] { R.id.title , R.id.listImgmovie};
private SimpleCursorAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    db = new MoviesHandler(this);
    cursor = db.getAllMovies();
    adapter = new SimpleCursorAdapter(this, 
            R.layout.list, cursor, cols, views, 0);
    adapter.setViewBinder(new CustomViewBinder());
    ListView lv = getListView();
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(this);
    registerForContextMenu(lv);
}

@Override
protected void onResume() {
    super.onResume();
    refreshList();
}

private void refreshList() {
    cursor = db.getAllMovies();
     adapter.changeCursor(cursor);
     adapter.notifyDataSetChanged();
}

//这是ViewBinder:

私有类CustomViewBinder实现了ViewBinder {

    @Override
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
            if (columnIndex == cursor.getColumnIndex(MoviesDbConstants.MOVIE_RATING)) {
                int num = (int) cursor.getFloat(columnIndex);
                switch (num){
                case 1:
                    ((ImageView) view).setBackgroundResource(R.drawable.one_star);
                    break;
                case 2:
                   ((ImageView) view).setBackgroundResource(R.drawable.two_star);
                   break;
                case 3:
                   ((ImageView) view).setBackgroundResource(R.drawable.three_star);
                   break;
                case 4:
                   ((ImageView) view).setBackgroundResource(R.drawable.four_star);
                   break;
                case 5:
                   ((ImageView) view).setBackgroundResource(R.drawable.five_star);
                   break;
                }
            return true;
            }
            return false;
        }
    }

1 个答案:

答案 0 :(得分:0)

在Android中,您必须与.equals()进行比较,而不是“num == 1”

如果在你的setViewValue()

中,你也应该在这里使用一个开关