2010-08-31 4 views
17

Étant donné le code ci-dessous, est-il possible d'avoir des images à la place du texte dans les planètes de tableau?Comment est-il possible de créer un spinner avec des images au lieu de texte?

Spinner s = (Spinner) findViewById(R.id.spinner);  
    ArrayAdapter adapter = ArrayAdapter.createFromResource(   
      this, R.array.planets, android.R.layout.simple_spinner_item);  
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  
    s.setAdapter(adapter); 

et

<string name="planet_prompt">Choose a planet</string> 
    <string-array name="planets">   
     <item>Mercury</item> 
     <item>Venus</item> 
     <item>Earth</item>   
     <item>Mars</item>   
     <item>Jupiter</item>   
     <item>Saturn</item>   
     <item>Uranus</item>   
     <item>Neptune</item>  
    </string-array>  

Répondre

20

Oui, il est de regarder le code ci-dessous:


array of data 

// stores the image database icons 
    private static Integer[] imageIconDatabase = { R.drawable.ball, 
      R.drawable.catmouse, R.drawable.cube, R.drawable.fresh, 
      R.drawable.guitar, R.drawable.orange, R.drawable.teapot }; 

    // stores the image database names 
    private String[] imageNameDatabase = { "ball", "catmouse", "cube", "fresh", 
      "guitar", "orange", "teapot" }; 

création Liste des hashmaps

private void initializeImageList() { 
     // TODO Auto-generated method stub 
     for (int i = 0; i < imageNameDatabase.length; i++) { 
      map = new HashMap<String, Object>(); 

      map.put("Name", imageNameDatabase[i]); 
      map.put("Icon", imageIconDatabase[i]); 
      spinnerList.add(map); 
     } 
     ImageView imageView = new ImageView(this); 
     imageView.setBackgroundResource((spinnerList.get(0).get("Icon")); 
     spinnerList.get(0).get("Name"); 
    } 

attribution spinner à l'adaptateur

public void createAddDialog() { 
     // TODO 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.list_editoradd_dialog); 

     Spinner spin = (Spinner) findViewById(R.id.spinnerAddImageList); 
     CustomSpinnerAdapter adapter = new CustomSpinnerAdapter(this, 
       spinnerData, R.layout.spinner_view, new String[] { "Name", 
         "Icon" }, new int[] { R.id.imageNameSpinner, 
         R.id.imageIconSpinner }); 
     spin.setAdapter(adapter); 
    } 

l'adaptateur utilisé ci-dessus est comme indiqué ci-dessous ..

package com.tcs.CustomListViewGeneration; 

import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 

class CustomSpinnerAdapter extends SimpleAdapter { 

    LayoutInflater mInflater; 
    private List<? extends Map<String, ?>> dataRecieved; 

    public CustomSpinnerAdapter(Context context, List<? extends Map<String, ?>> data, 
      int resource, String[] from, int[] to) { 
     super(context, data, resource, from, to); 
     dataRecieved =data; 
     mInflater=LayoutInflater.from(context); 
    } 

    @SuppressWarnings("unchecked") 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.spinner_view, 
        null); 
     } 
    // HashMap<String, Object> data = (HashMap<String, Object>) getItem(position); 
     ((TextView) convertView.findViewById(R.id.imageNameSpinner)) 
       .setText((String) dataRecieved.get(position).get("Name")); 
     ((ImageView) convertView.findViewById(R.id.imageIconSpinner)) 
       .setBackgroundResource(dataRecieved.get(position).get("Icon"))); 
     return convertView; 
    } 
} 

+0

Il n'y a pas d'explication nécessaire, je suppose en tant que telle, la structure de l'adaptateur custume est juste une base que nous suivons toujours. En outre, le code n'est pas complexe et est divisé en fonctions et classes de sorte qu'il n'est pas nécessaire que vous soyez einstien pour le comprendre! –

+0

Qu'est-ce que la liste de spinner – grant

+0

On dirait une solution mais le manque de beaucoup de matériel .. – Sam

16

J'ai juste besoin d'une solution super facile pour un ensemble fixe d'images dans un fileur, alors je l'ai fait:

public class SimpleImageArrayAdapter extends ArrayAdapter<Integer> { 
private Integer[] images; 

public SimpleImageArrayAdapter(Context context, Integer[] images) { 
    super(context, android.R.layout.simple_spinner_item, images); 
    this.images = images; 
} 

@Override 
public View getDropDownView(int position, View convertView, ViewGroup parent) { 
    return getImageForPosition(position); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    return getImageForPosition(position); 
} 

private View getImageForPosition(int position) { 
     ImageView imageView = new ImageView(getContext()); 
     imageView.setBackgroundResource(images[position]); 
     imageView.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
     return imageView; 
} 

}

Et puis dans le code que vous pouvez simplement l'utiliser comme ceci:

SimpleImageArrayAdapter adapter = new SimpleImageArrayAdapter(context, 
     new Integer[]{R.drawable.smiley1, R.drawable.smiley2, R.drawable.smiley3, R.drawable.smiley4, R.drawable.smiley5}); 
    spinner.setAdapter(adapter); 
+1

ne marchait pas pour moi – grant