为什么 setImageResource 不显示任何内容?

LA_*_*LA_ 5 resources android android-listview android-imageview

我想根据数据库值在 ListView 中显示一个图标。我按照这个答案来这样做。但结果什么也没有显示。这是我的row.xml中的内容:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">

    <ImageView
        android:id="@+id/movie_subscribed_icon"
        android:padding="3dip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/star_off"/>

    <LinearLayout 
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical">

     <TextView android:id="@+id/movie_name"
     ...
Run Code Online (Sandbox Code Playgroud)

这是代码:

    movies.setViewBinder(new SimpleCursorAdapter.ViewBinder() {

        @Override
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
          int viewId = view.getId();
          switch(viewId) {
          case R.id.movie_name:
                  int readValue = cursor.getInt(cursor.getColumnIndexOrThrow(MoviesDbAdapter.KEY_READ));
                  if (readValue == 1) { // viewed movie item
                      TextView movieName = (TextView) view;
                      movieName.setTextColor(Color.GRAY);
                  }
                  break;
          case R.id.movie_subscribed_icon:
              int subscribedValue = cursor.getInt(cursor.getColumnIndexOrThrow(MoviesDbAdapter.KEY_READ));
                  if (subscribedValue > 0) { // subscribed movie item
                      ImageView movieIcon = (ImageView) view;
                      movieIcon.setImageResource(R.drawable.star_off);
                  }
              break;
          }
          return false;
        }

      } );
Run Code Online (Sandbox Code Playgroud)

我特别在代码中使用与默认图标相同的图标。这里有什么问题吗?(我只有star_offindrawable-hdpidrawable-mdpi文件夹)

更新。下面的代码运行良好:

movieIcon.setImageDrawable(getResources().getDrawable(R.drawable.star_off));
Run Code Online (Sandbox Code Playgroud)

hfi*_*ter 6

public void setImageResource (int resId):这会在 UI 线程上读取和解码位图,这可能会导致延迟。如果这是一个问题,请考虑使用 setImageDrawable(Drawable) 或 setImageBitmap(Bitmap) 和 BitmapFactory 代替。

尝试使图像视图无效,或使用文档建议的替代方案之一。


LA_*_*LA_ 2

我在另一个问题中找到了解决方案。

基本上,setViewValue() 方法应该返回 false,直到为图像视图调用它为止。然后它应该在视图中设置数据并返回 true。返回值指示 ViewBinder 是否设置视图本身,或者适配器是否应通过其默认行为绑定数据本身。

由于我没有返回 true,所以它工作不正确。现在它工作得很好。