SimpleAdapter, Texte et Image dans les spinner
J'ai un petit problème. Eh bien, permettez-moi tout d'abord de préciser ce à quoi je suis en train d'accomplir.
J'ai eu un spinner qui tire les ficelles d'un tableau stocké.
Comme vous n'avez donc pas besoin de le lire si:
ArrayAdapter<?> healthadapter = ArrayAdapter.createFromResource(this, R.array.health, android.R.layout.simple_spinner_item);
mHealthSpin = (Spinner) findViewById(R.id.health_spin);
healthadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mHealthSpin.setAdapter(healthadapter);
Simple et presque suffisante. Je voudrais ajouter une image à la Spinner.
la RadioButton
n'est pas nécessaire. Ainsi, le Spinner
une fenêtre devrait apparaître, et de disposer d'une liste:
TEXTE *IMAGE* TEXTE2 *IMAGE* TEXTE3 *IMAGE*
Jusqu'à présent, j'ai un custom SimpleAdapter.
Ici, est le Problème!!!!! :
Le texte est en place mais pas l'image.
Voici le code:
public class stageadapter extends SimpleAdapter {
private Context localContext;
private ArrayList<HashMap<String, Object>> localList;
public stageadapter(Context context, ArrayList<HashMap<String, Object>> list, int resource, String[] from, int[] to) {
super(context, list, resource, from, to);
localContext = context;
localList = list;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (null == convertView) {
LayoutInflater inflater = (LayoutInflater) localContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.stagerow, null);
}
TextView name = (TextView) convertView.findViewById(R.id.stage_name);
name.setText((String) localList.get(position).get("Name"));
ImageView icon = (ImageView) convertView.findViewById(R.id.stage_icon);
icon.setImageResource(R.drawable.icon);
return convertView;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
if (null == convertView) {
LayoutInflater inflater = (LayoutInflater) localContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.stagerow, null);
}
TextView name = (TextView) convertView.findViewById(R.id.stage_name);
name.setText((String) localList.get(position).get("Name"));
ImageView icon = (ImageView) convertView.findViewById(R.id.stage_icon);
icon.setImageResource(R.drawable.icon);
return convertView;
}
}
J'ai l'intention d'utiliser une switch
instruction pour définir des images différentes pour chaque nom. cependant je me suis arrêté ici jusqu'à ce que je peux obtenir une image à afficher.
Comment j'appelle:
ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("Name", "One");
map.put("Icon", R.drawable.icon);
list.add(map);
map = new HashMap<String, Object>();
map.put("Name", "Two");
map.put("Icon", R.drawable.icon);
list.add(map);
mStageSpin = (Spinner) findViewById(R.id.stage_spin);
stageadapter adapter = new stageadapter(getApplicationContext(), list, R.layout.stagerow, new String[]{"Name", "Icon"}, new int[]{R.id.stage_name, R.id.stage_icon});
mStageSpin.setAdapter(adapter);
La réponse pour moi est dans les commentaires.
OriginalL'auteur Brian | 2010-09-10
Vous devez vous connecter pour publier un commentaire.
Supprimer la ligne suivante, sa confusion de votre carte:
healthadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Vérifier la définition xml de votre ligne de mise en page. Erreur commune: À l'horizontale LinearLayout vous devez utiliser wrap_content pour le TextView et de l'ImageView (pas fill_parent)
Qui était-il! Mon TextView a été défini comme fill_parent Merci
Cela a fonctionné pour moi, merci!
OriginalL'auteur Sameer Segal
Le problème est dans getView vous avez attribué texte correspondant à la position à l'aide de
((TextView) convertView.findViewById(R.id.name)).setText((String) data.get("Name"));
Mais pour l'image de u ont utilisé les mêmes ressources, c'est à dire
((ImageView) convertView.findViewById(R.id.icon)).setImageResource(R.drawable.icon);
Vous avez besoin d'utiliser les "données" hashmap liste et attribuer à l'image ici
OriginalL'auteur Vicky Kapadia
Oui @Vicky, vous avez raison.
Pour l'image il doit être
OriginalL'auteur Asiimwe
Basée sur la réponse ci-dessus, mais avec un peu de bricolage pour simplifier le code et le faire travailler pour la liste déroulante. D'abord définir le format xml pour la ligne de mise en page que vous voulez. Dans ce cas, un textview et une image en ligne:
text_image_spinner_layout.xml
Ensuite, créer la classe qui va construire chaque ligne en fonction des besoins:
TextImageAdapter.java
Et maintenant, vous avez juste besoin de construire le cône adaptateur lors de son instanciation. Vous fournir les "choses" ...:
OriginalL'auteur Neil Townsend