2010-08-31 48 views
17

Với mã dưới đây, có thể có hình ảnh thay vì văn bản trong các hành tinh mảng không?Làm thế nào để tạo ra một spinner với hình ảnh thay vì văn bản?

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>  

Trả lời

20

Có nó được nhìn vào mã bên dưới:


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

tạo Danh sách 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"); 
    } 

gán spinner để thiết bị tiếp hợp

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

adapter sử dụng ở trên là như đưa ra dưới đây ..

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

Không có lời giải thích cần tôi đoán như vậy, cấu trúc custome bộ chuyển đổi chỉ là một cơ bản mà chúng tôi luôn luôn tuân theo. Ngoài ra, mã không phức tạp và được chia thành các hàm và các lớp để bạn không cần phải einstien để hiểu nó! –

+0

Danh sách spinner – grant

+0

Trông giống như một giải pháp nhưng thiếu nhiều vật liệu .. – Sam

16

Tôi chỉ cần một giải pháp dễ dàng cho một siêu tập hợp hình ảnh cố định trong một spinner, vì vậy tôi đã làm điều này:

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

}

Và sau đó trong mã bạn có thể chỉ cần sử dụng nó như thế này:

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

không hoạt động đối với tôi – grant

Các vấn đề liên quan