Pourquoi setImageResource n'affiche rien?
Je voudrais afficher une icône dans ma ListView en fonction de la valeur de base de données. J'ai suivi cette réponse à faire.
Mais dans la suite, rien n'est affiché. Voici ce que j'ai dans mon 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"
...
et voici le code:
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;
}
} );
J'ai surtout utiliser la même icône dans mon code en tant que par défaut.
Quel est le problème ici? (J'ai star_off
dans drawable-hdpi
et drawable-mdpi
dossiers uniquement)
Upd. le code suivant fonctionne bien:
movieIcon.setImageDrawable(getResources().getDrawable(R.drawable.star_off));
Btw, je vois la suite dans le LogCat:
Et même si je change
WARN/ImageView(7293): Unable to find resource: 2 WARN/ImageView(7293): android.content.res.Resources$NotFoundException: Resource ID #0x2
Et même si je change
R.drawable.star_off
à android.R.drawable.star_off
j'ai ce problème et de procéder à l'avertissement.OriginalL'auteur LA_ | 2011-03-26
Vous devez vous connecter pour publier un commentaire.
public void setImageResource (int resId) : Ce n'Bitmap de la lecture et de décodage sur le thread de l'INTERFACE utilisateur, ce qui peut entraîner un temps de latence hoquet. Si c'est un souci, pensez à utiliser setImageDrawable(Drawable) ou setImageBitmap(Bitmap) et BitmapFactory à la place.
Essayer d'invalider votre affichage de l'image, ou d'utiliser les alternatives que suggère la documentation.
"Le dessin est gérée par la marche de l'arbre et le rendu de chacune de vue qui coupe le les invalides de la région. Parce que l'arbre est parcouru dans l'ordre, cela signifie que les parents vont dessiner avant (c'est à dire, derrière) de leurs enfants, avec les frères et sœurs établi dans l'ordre où ils apparaissent dans l'arbre. Si vous définir un arrière-plan dessiné pour la Vue, la Vue de tirage pour vous avant de rappeler à ses onDraw() la méthode. Notez que le cadre ne tirera pas les vues qui ne sont pas dans l'invalide de la région. Pour forcer une vue à dessiner, d'appeler invalidate(). "
Hmm. Quelque chose d'étrange se passe. Il a commencé à travailler avec
setImageDrawable
, mais maintenant elle ne fonctionne pas encore. Si je l'appellemovieIcon.invalidate();
immédiatement aprèssetImageDrawable
, ça aide pas.OriginalL'auteur hfitzwater
J'ai trouvé une solution à une autre question.
Puisque je n'ai pas de retour de vrai, il a travaillé de manière incorrecte.
Maintenant, il fonctionne parfaitement.
OriginalL'auteur LA_
Tentative #2.
Pourquoi n'essayez-vous pas ce...
Je pense que vous pourriez être la création d'un nouveau ImageView plutôt que de prendre celui qui existe déjà dans votre mise en page.
OriginalL'auteur hfitzwater
Ce morceau de code permet de résoudre le problème :
OriginalL'auteur Nitin
Cela fonctionne...
Dans le XML, ne pas utiliser l'attribut "src" pour ImageView drawable. Au lieu de cela, utiliser des "arrière-plan".
Comme ceci:
Et le code Java pour changer l'image au moment de l'exécution est ici...
Remplacer le image_view_name avec votre ImageView dans le fichier XML et le resource_id avec votre nom de l'image dans le drawable dossiers. N'oubliez pas d'appeler invalidate().
Remarque: Ne pas utiliser setBackgroundDrawable() comme obsolète.
Espère que cela fonctionne pour les autres aussi.
OriginalL'auteur Ram Iyer