Comment définir ImageViews source dynamiquement à partir de ArrayList<String> avec Drawable nom de l'image?
J'ai une ListView avec une ImageView, un TextView et un autre ImageView dans chaque ligne.
Le code ci-dessous est le code xml de ma ListView ligne:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="#FFF">
<ImageView
android:id="@+id/left"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center"
android:src="@drawable/ic_default"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="1"
android:textSize="16sp" />
<ImageView
android:id="@+id/right"
android:layout_width="50dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:src="@drawable/ic_cena_play"
android:layout_marginRight="0dp"
android:layout_marginLeft="10dp"
android:clickable="true"
android:background="@drawable/mybuttonplay" />
</LinearLayout>
J'ai une ArrayList < String > avec les noms d'un drawable je veux mettre dans le premier ImageView de lignes. Je veux changer le ImageViews source "ic_default" à ceux qui en ont le nom dans la liste de tableaux, dinamically.
Dans mon Activité, à l'intérieur de onCreate(), je suis en utilisant un Adaptateur, comme le code ci-dessous:
ArrayList<String> items = new ArrayList();
items.add("Star");
items.add("Moon");
items.add("Dog");
items.add("Bird");
items.add("Tree");
ArrayList<String> itemsimg = new ArrayList();
itemsimg.add("ic_star");
itemsimg.add("ic_moon");
itemsimg.add("ic_dog");
itemsimg.add("ic_bird");
itemsimg.add("ic_tree");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.scenesrow, R.id.text, items) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = super.getView(position, convertView, parent);
ImageView left = (ImageView) row.findViewById(R.id.left);
//here I want to change the resource
//Like if I had a function called getRosourceId(). DOES IT EXIST?!
int x = getResourceId( itemsimg.get(position) );
left.setImageResource(x);
View right = row.findViewById(R.id.right);
right.setTag(position);
right.setOnClickListener(ScenesActivity.this);
return row;
}
};
Mis à jour
Merci pour les réponses! Maintenant, je peux changer l'ImageView source dinamically (mais pas encore de l'ArrayList < String >). Le setImageResource() la méthode n'était pas disponible avant parce que j'avais un point de Vue. Avec la fonte de ImageView vous tous suggéré, une grande partie du problème était ok. Mais les réponses ne couvre pas les dinamically chose de "nom de la ressource".
Le dernier problème est maintenant la gauche.setImageResource(resId); méthode demande un ID de Ressource, et j'ai une Chaîne de caractères. Comment faire?
Et désolé, autre code de la version eu quelques erreurs. Maintenant, il est fixé. Je pense que le dernier problème est clair maintenant.
- Je pense que créer des classe pojo(getter/Setter de la méthode) et de créer la coutume adaptateur vous devez changer l'image facilement à l'aide Personnalisée et de classe pojo
- parce que vous êtes à l'aide de
View
au lieu deImageView
, voir ma réponse à faire votre travail
Vous devez vous connecter pour publier un commentaire.
changement itemsimg avec:
pour arriver
drawableId
avec de la Ficelle que vous pouvez faire ceci:Il n'est pas efficace, mais il fonctionne pour rechercher des ressources occasionnelles.
substring
méthode pour l'obtenir , ou de les stocker dans un autre TableauitemsImg
Essayez ceci::
même pour la gauche aussi
Après Discussion
Remplacer votre code comme ceci:
Facilement et de manière structurée pour ce faire:
1)ajouter les ressources de votre drawable dossier, permet de supposer (ic_home,ic_launcher,ic_logout) //vous pouvez ajouter n'importe quel nombre d'images
2)ajouter ces noms dans le strings.xml présents dans les valeurs de dossier ainsi que le nom qui sera affiché en plus de l'image. Il ressemblerait à quelque chose comme ça...
3) Maintenant, créez un pojo(getter/setter) de la classe qui va contenir le texte d'icône et l'icône de l'id d'un objet. Quelque chose comme ça..
4) Maintenant, nous aurions besoin de le remplir avant de le donner à la carte. Nous pourrions le faire de cette manière
5) Maintenant, adaptateur vous pourriez mettre en œuvre cette façon
public class DrawerListAdapter s'étend ArrayAdapter {
6) Vous êtes tous ensemble...assurez-vous d'avoir initialisé les vues et les communes des trucs