【问题标题】:Set ImageView on a ListView with ViewBinder depending on RatingBar value根据 RatingBar 值使用 ViewBinder 在 ListView 上设置 ImageView
【发布时间】:2013-05-16 00:00:05
【问题描述】:

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

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

LogCat 中没有错误,但图像视图根本没有改变... 也许我在刷新列表时错了?我是一个principiant请帮助我:) 我做错了什么??????

//这是我的主要活动:

公共类 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;
        }
    }

【问题讨论】:

    标签: android listview imageview android-viewbinder ratingbar


    【解决方案1】:

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

    如果在你的 setViewValue() 中,你应该在这里使用一个开关而不是这么多

    【讨论】:

    • 等于 int 值??它不允许我这样做!
    猜你喜欢
    • 2011-08-23
    • 2011-12-28
    • 1970-01-01
    • 2017-07-02
    • 2019-11-05
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多