2010-08-31 103 views
17

鑑於下面的代碼,是否有可能在陣列行星中有圖像而不是文本?如何用圖像而不是文本創建微調器?

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

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

回答

20

是的,它是看一下下面的代碼:


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

創建包含HashMap的名單

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

分配微調到適配器

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

上面使用的適配器是如以下給出..

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

有沒有需要解釋我想正因爲如此,在custome轉接器結構僅僅是基本的一個我們總是遵循這個原則。代碼並不複雜,分爲函數和類,所以不需要你去理解它。 – 2012-05-17 12:25:09

+0

什麼是微調列表 – grant 2017-04-19 09:55:46

+0

看起來像一個解決方案,但缺乏一些材料.. – Sam 2017-08-04 12:33:17

16

我只需要一個超級簡單溶液用於固定在一個微調的圖像集,所以我做到了這一點:

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

}

然後在代碼中你可以使用它像這樣:

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

不適合我 – grant 2017-04-19 10:50:58

相關問題