2010-08-31 6 views
17

Mit dem folgenden Code ist es möglich, Bilder anstelle von Text in den Array-Planeten zu haben?Wie ist es möglich, einen Spinner mit Bildern anstelle von Text zu erstellen?

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

und

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

Antwort

20

Ja, es ist unten auf den Code aussehen:


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

Erstellen Liste der 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"); 
    } 

Spinner Zuordnung

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

der Adapter unten ..

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

Ich brauche gegeben verwendeten
+0

Es gibt keine Erklärung dafür ist erforderlich ich als solches erraten, ist die custome Adapterstruktur nur die grundlegendste dem wir immer folgen. Auch der Code ist nicht komplex und gliedert sich in Funktionen und Klassen, so dass es nicht nötig ist, dass Sie sich einlesen, um es zu verstehen! –

+0

Was ist Spinner Liste – grant

+0

Sieht aus wie eine Lösung, aber Mangel an viel Material .. – Sam

16

wie oben auf dem Adapter nur eine super einfache Lösung für ein fixed set von Bildern in einem Spinner, also habe ich das getan:

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

}

Und dann in dem Code, den Sie gerade es wie folgt verwenden:

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

hat nicht funktioniert für mich – grant

Verwandte Themen