2010-08-31 98 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

相关问题