Given the code bellow, is it possible to have images instead of text in the array planets?
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);
and
Choose a planet- Mercury
- Venus
- Earth
- Mars
- Jupiter
- Saturn
- Uranus
- Neptune
Yes it is look at the code below:
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" };
creating List of hashmaps
private void initializeImageList() { // TODO Auto-generated method stub for (int i = 0; i (); 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"); }
assigning spinner to adapter
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); }
the adapter used above is as given below..
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> dataRecieved; public CustomSpinnerAdapter(Context context, List extends Map> 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 data = (HashMap) 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; } }
I just needed a super easy solution for a fixed set of images in a spinner, so I did this:
public class SimpleImageArrayAdapter extends ArrayAdapter { 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; }
}
And then in the code you can just use it like this:
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);