使用 HashMap 填充 Spinner?

Populating Spinner using a HashMap?

我正在尝试使用自定义 class 中的项目填充微调器,我通过一个包含 HashMap 的简单适配器创建了该项目。当我使用 setSimpleAdapter() 时,我的应用程序一直崩溃,所以我将其注释掉了。但是当我使用 spinner1.setAdapter(dataAdapter) 时,它不会在微调器上显示任何项目。这是我的代码:

这是我的 onCreate():

spinner1 = (Spinner) findViewById(R.id.spinner1);

        ArrayAdapter <CharSequence> dataAdapter =
                new ArrayAdapter <CharSequence> (this, android.R.layout.simple_spinner_item );
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spinner1.setAdapter(dataAdapter);

        //setSimpleAdapter();

        // Spinner item selection Listener
        addListenerOnSpinnerItemSelection();

        // Button click Listener
        addListenerOnButton();

// Add spinner data
public void addListenerOnSpinnerItemSelection(){

    spinner1.setOnItemSelectedListener(new CustomOnItemSelectedListener());
}

//get the selected dropdown list value
public void addListenerOnButton() {

    spinner1 = (Spinner) findViewById(R.id.spinner1);

    btnSubmit = (Button) findViewById(R.id.btnSubmit);

    btnSubmit.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            final AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
            alertDialog.setTitle("X");
            alertDialog.setMessage("" + String.valueOf(spinner1.getSelectedItem()));
            alertDialog.setButton("Close", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    //Dismisses alert
                    alertDialog.dismiss();
                }
            });

            alertDialog.show();

        }

    });

}

任何人都可以指出我正确的方向吗?我已经在谷歌上搜索了一个小时了。任何帮助将不胜感激。

嗯,你的代码 post 还不够一半,但假设你有一个 HashMap<String, Object> 那么你想做这样的事情,将值数组传递给构造函数:

Collection<Object> vals = hashMap.values();
Object[] array = vals.toArray(new Object[vals.size()]);
ArrayAdapter<CharSequence> dataAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, array);

只需将 Object 替换为您的自定义 class 并确保覆盖 toString() 以定义应显示为文本的内容。