Почему setImageResource ничего не отображает? - PullRequest
4 голосов
/ 26 марта 2011

Я хотел бы отобразить значок в моем 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"
     ...

, а вот код:

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

      } );

Я особенно использую тот же значок в своем кодепо умолчанию один.Что здесь не так?(У меня есть только star_off в папках drawable-hdpi и drawable-mdpi)

Upd .хорошо работает следующий код:

movieIcon.setImageDrawable(getResources().getDrawable(R.drawable.star_off));

Ответы [ 5 ]

4 голосов
/ 26 марта 2011

public void setImageResource (int resId) : Это выполняет чтение и декодирование растрового изображения в потоке пользовательского интерфейса, что может вызвать сбой задержки. Если это проблема, рассмотрите использование вместо этого setImageDrawable (Drawable) или setImageBitmap (Bitmap) и BitmapFactory.

Попробуйте сделать недействительным ваш просмотр изображений или воспользуйтесь одной из альтернатив, предложенных в документации.

2 голосов
/ 28 марта 2011

Я нашел решение в другом вопросе.

В основном метод setViewValue () должен возвращать false, пока он не будет вызван для вашего изображения. Тогда это должно установить данные в представлении и вернуть правда. Возвращаемое значение указывает установить ли ViewBinder вид сам или должен ли адаптер связать сами данные по умолчанию поведение.

Так как я не вернул true, он работал неправильно. Теперь работает отлично.

1 голос
/ 17 мая 2011

Этот фрагмент кода решает проблему:

ImageView movieIcon = (ImageView)findViewById(R.id.movie_subscribed_icon);
Drawable drawable = this.getResources().getDrawable(R.drawable.android);
movie_subscribed_icon.setBackgroundDrawable(drawable);
1 голос
/ 27 марта 2011

Попытка № 2.Почему бы вам не попробовать это ...

ImageView movieIcon = (ImageView)findViewById(R.id.movie_subscribed_icon);
movieIcon.setImageResource(R.drawable.star_off);

Я думаю, что вы, возможно, создаете новый ImageView вместо того, чтобы получить тот, который уже существует в вашем макете.

0 голосов
/ 04 августа 2014

Это работает ...

В XML не используйте атрибут "src" для отрисовки ImageView.Вместо этого используйте «background».

Например:

<ImageView
        android:id="@+id/maximize_inbox_window"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/ic_action_original_image"
        android:layout_gravity="center_vertical"
        android:clickable="true"
        android:paddingRight="5dp" />

И код Java для изменения изображения во время выполнения здесь ...

ImageView img = (ImageView) rootView.findViewById(R.id.image_view_name);
img.setBackground(getResources().getDrawable(R.drawable.resource_id));
img.invalidate();

Заменитьimage_view_name с вашим ImageView в XML и resource_id с вашим именем изображения в доступных для рисования папках.Не забудьте вызвать invalidate ().

Примечание. Не используйте setBackgroundDrawable () в качестве устаревшего.

Надеюсь, это работает и для других.

...