什么是在Android中的微调器中实现键值对的正确方法

这是在Android中为Spinner实现键值对的正确方法吗?

package com.mypackage import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Spinner; import android.widget.ArrayAdapter; import android.widget.AdapterView; import android.widget.TextView; public class SpinnerAndAdapter extends Activity { TextView valueTextView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); valueTextView = (TextView)findViewById( R.id.selected ); Spinner s = (Spinner)findViewById(R.id.spinner); final MyData items[] = new MyData[3]; items[0] = new MyData( "key1","value1" ); items[1] = new MyData( "key2","value2" ); items[2] = new MyData( "key3","value3" ); ArrayAdapter<MyData> adapter = new ArrayAdapter<MyData>( this, android.R.layout.simple_spinner_item, items ); adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); s.setAdapter(adapter); s.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { public void onItemSelected( AdapterView<?> parent, View view, int position, long id) { MyData d = items[position]; valueTextView.setText( d.getValue() ); } public void onNothingSelected(AdapterView<?> parent) { } } ); } class MyData { public MyData( String spinnerText, String value ) { this.spinnerText = spinnerText; this.value = value; } public String getSpinnerText() { return spinnerText; } public String getValue() { return value; } public String toString() { return spinnerText; } String spinnerText; String value; } } 

这是一个方法。 我使用它相当多,虽然我使用我自己的适配器(从BaseAdpaterinheritance)。 另一种方法会喜欢上面有一个索引(0,1,2等)映射到一个值,当你得到一个项目得到它的索引一个很好,所以你可以检索它的价值从地图。 我更喜欢那个选项

我创build了一个用于这些场景的HashMap 适配器 。 另请参阅示例项目

  mapData = new LinkedHashMap<String, String>(); mapData.put("shamu", "Nexus 6"); mapData.put("fugu", "Nexus Player"); mapData.put("volantisg", "Nexus 9 (LTE)"); mapData.put("volantis", "Nexus 9 (Wi-Fi)"); mapData.put("hammerhead", "Nexus 5 (GSM/LTE)"); mapData.put("razor", "Nexus 7 [2013] (Wi-Fi)"); mapData.put("razorg", "Nexus 7 [2013] (Mobile)"); mapData.put("mantaray", "Nexus 10"); mapData.put("occam", "Nexus 4"); mapData.put("nakasi", "Nexus 7 (Wi-Fi)"); mapData.put("nakasig", "Nexus 7 (Mobile)"); mapData.put("tungsten", "Nexus Q"); adapter = new LinkedHashMapAdapter<String, String>(this, android.R.layout.simple_spinner_item, mapData); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner = (Spinner) findViewById(R.id.spinner); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(this); 

为了避免从监听器回到items[] ,使用从适配器返回一个Object的getItemAtPosition 。 要访问MyData方法,您必须像这样投射对象:

 public void onItemSelected( AdapterView<?> parent, View view, int position, long id) { MyData d = (MyData) parent.getItemAtPosition(position); valueTextView.setText( d.getValue() ); } 

创build键值的映射,并在onItemSelected中获取一个值(可以通过spinner.getAdapter()。getItem(position))获得“key”。