Spininner中的SimpleAdapter,Text和Image

Bri*_*ian 10 java android

我有一点问题.好吧,让我先说明我想要完成的事情.我有一个旋转器,可以从存储的数组中拉出字符串.像这样,你不需要阅读它:

ArrayAdapter<?> healthadapter = ArrayAdapter.createFromResource(this, R.array.health, android.R.layout.simple_spinner_item);
mHealthSpin = (Spinner) findViewById(R.id.health_spin);
healthadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mHealthSpin.setAdapter(healthadapter);
Run Code Online (Sandbox Code Playgroud)

简单而且几乎足够.我想Spinner.RadioButton没有必要的情况下添加图像.所以Spinner应该弹出并有一个列表:

TEXT     *IMAGE*
TEXT2    *IMAGE*
TEXT3    *IMAGE*

到目前为止我有一个习惯SimpleAdapter. 这是问题!! :

文字出现但不是图像.

这是代码:

public class stageadapter extends SimpleAdapter {

    private Context localContext;
    private ArrayList<HashMap<String, Object>> localList;

    public stageadapter(Context context, ArrayList<HashMap<String, Object>> list, int resource, String[] from, int[] to) {
        super(context, list, resource, from, to);
        localContext = context;
        localList = list;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (null == convertView) {
            LayoutInflater inflater = (LayoutInflater) localContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.stagerow, null);
        }
        TextView name = (TextView) convertView.findViewById(R.id.stage_name);
        name.setText((String) localList.get(position).get("Name"));
        ImageView icon = (ImageView) convertView.findViewById(R.id.stage_icon);

        icon.setImageResource(R.drawable.icon);

        return convertView;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        if (null == convertView) {
            LayoutInflater inflater = (LayoutInflater) localContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.stagerow, null);
        }
        TextView name = (TextView) convertView.findViewById(R.id.stage_name);
        name.setText((String) localList.get(position).get("Name"));
        ImageView icon = (ImageView) convertView.findViewById(R.id.stage_icon);
        icon.setImageResource(R.drawable.icon);

        return convertView;
    }
}
Run Code Online (Sandbox Code Playgroud)

我打算用一个switch语句为每个名字设置不同的图像.然而,我停在这里,直到我可以得到任何图像显示.

我怎么称呼:

ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("Name", "One");
    map.put("Icon", R.drawable.icon);
    list.add(map);

    map = new HashMap<String, Object>();
    map.put("Name", "Two");
    map.put("Icon", R.drawable.icon);
    list.add(map);

    mStageSpin = (Spinner) findViewById(R.id.stage_spin);
    stageadapter adapter = new stageadapter(getApplicationContext(), list, R.layout.stagerow, new String[]{"Name", "Icon"}, new int[]{R.id.stage_name, R.id.stage_icon});
    mStageSpin.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

我的答案在评论中.

Sam*_*gal 13

删除以下行 - 它使您的适配器混淆:

healthadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);

        ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("Name", "One");
        map.put("Icon", R.drawable.icon);
        list.add(map);

        map = new HashMap<String, Object>();
        map.put("Name", "Two");
        map.put("Icon", R.drawable.icon);
        list.add(map);

        Spinner spin = (Spinner) findViewById(R.id.spin);
        myAdapter adapter = new myAdapter(getApplicationContext(), list,
                R.layout.list_layout, new String[] { "Name", "Icon" },
                new int[] { R.id.name, R.id.icon });

        spin.setAdapter(adapter);

    }

    private class myAdapter extends SimpleAdapter {

        public myAdapter(Context context, List<? extends Map<String, ?>> data,
                int resource, String[] from, int[] to) {
            super(context, data, resource, from, to);

        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            if (convertView == null) {
                convertView = getLayoutInflater().inflate(R.layout.list_layout,
                        null);
            }

            HashMap<String, Object> data = (HashMap<String, Object>) getItem(position);

            ((TextView) convertView.findViewById(R.id.name))
                    .setText((String) data.get("Name"));
            ((ImageView) convertView.findViewById(R.id.icon))
                    .setImageResource(R.drawable.icon);

            return convertView;
        }

    }
Run Code Online (Sandbox Code Playgroud)