如何在Android中使用键值实现Spinner?

时间:2014-11-30 11:56:42

标签: android spinner android-spinner

我想将Spinner与键值对一起使用。 UI显示KEY,并获得选择我获得VALUE。

所以我使用HashMap,

String name[] = { "Btech", "Mtech", "Bca", "Mca" };
String id[] = { "111", "222", "333", "444" };

HashMap<String, String> spinnerMap = new HashMap<String, String>();

 for (int i = 0; i < name.length; i++) {
        spinnerMap.put(name[i], id[i]);
    }

ArrayAdapter<HashMap<String, String>> adapter = new ArrayAdapter<HashMap<String,   String>>(this, android.R.layout.simple_spinner_item);

adapter.add(spinnerMap);

spinner.setAdapter(adapter);

但它正在显示

{Btech=111,Mtech=222,Bca=333,Mca=444}

2 个答案:

答案 0 :(得分:0)

它使用HashMap的toString方法显示值。所以它认为这是旋转器中的一个对象。

有两种方法可以做到这一点:

  1. 实现ArrayAdapter的扩展并覆盖getView()方法以返回适当的值。

  2. 实现自己的Object以填充微调器并覆盖其toString方法。

  3. 第一种方法有偏好,因为它允许更大的灵活性。

答案 1 :(得分:0)

    Spinner spinner= (Spinner) 
        .findViewById(R.id.spinner1);
ArrayList<HashMap<String, String>> list = yourList;

SimpleAdapter arrayAdapter = new SimpleAdapter(mContext, list,
        R.layout.spinner_item2, new String[] { SystemGlobal.CODE,
                SystemGlobal.DESCRIPTION }, new int[] { R.id.txv_code,
                R.id.txv_description });

spinner.setAdapter(arrayAdapter);

spinner
        .setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent,
                    View view, int position, long id) {
                String desc = ((TextView) view
                        .findViewById(R.id.txv_description)).getText()
                        .toString();
                String code = ((TextView) view
                        .findViewById(R.id.txv_code)).getText()
                        .toString();

                Toast.makeText(mContext, "Code: "+code+", Desc: "+ desc, Toast.LENGTH_SHORT).show();


            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });




  xml file:
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
   android:orientation="vertical" >

  <TextView
android:id="@+id/txv_code"
style="@style/textview_style"
android:layout_width="1dip"
android:layout_height="wrap_content"
android:visibility="gone" />

 <TextView
  android:id="@+id/txv_description"
  style="@style/textview_style"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:gravity="center"
  android:padding="@dimen/spinner_item_padding" />

  </LinearLayout>