什么';这是在android的Spinner中实现键值对的正确方法

什么';这是在android的Spinner中实现键值对的正确方法,android,Android,这是在Android中为微调器实现键值对的正确方法吗 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.wi

这是在Android中为微调器实现键值对的正确方法吗

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;
    }
}
package com.mypackage
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Spinner;
导入android.widget.ArrayAdapter;
导入android.widget.AdapterView;
导入android.widget.TextView;
公共类spinnerandapter扩展活动
{
TextView值TextView;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
valueTextView=(TextView)findViewById(R.id.selected);
微调器s=(微调器)findViewById(R.id.Spinner);
最终MyData项目[]=新MyData[3];
项目[0]=新的MyData(“键1”、“值1”);
项目[1]=新的MyData(“键2”、“值2”);
项目[2]=新的MyData(“键3”、“值3”);
阵列适配器=
新阵列适配器(
这
android.R.layout.simple\u微调器\u项,
项目);
adapter.setDropDownViewResource(
android.R.layout.simple\u微调器\u下拉菜单\u项);
s、 设置适配器(适配器);
s、 setOnItemSelectedListener(
新建AdapterView.OnItemSelectedListener(){
公营部门选举(
AdapterView父级,
视图视图,
int位置,
长id){
MyData d=项目[位置];
valueTextView.setText(d.getValue());
}
未选择公共无效(AdapterView父级){
}
}
);
}
类MyData{
公共MyData(字符串微调器文本、字符串值){
this.spinnerText=spinnerText;
这个值=值;
}
公共字符串getSpinnerText(){
返回喷丝头文本;
}
公共字符串getValue(){
返回值;
}
公共字符串toString(){
返回喷丝头文本;
}
字符串喷丝板文本;
字符串值;
}
}

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

这是一种方法。 虽然我使用自己的适配器(继承自BaseAdapter),但我还是经常使用它。 另一种方法是让上面的索引(0、1、2等)映射到一个值,当你得到一个项目时,得到它的索引a,这样你就可以从映射中检索它的值。
我不太喜欢这个选项…

为了避免从侦听器返回
项[]
,请使用
getItemAtPosition
从适配器返回一个对象。要访问
MyData
方法,必须按如下方式强制转换对象:

public void onItemSelected(
        AdapterView<?> parent, View view, int position, long id) {
    MyData d = (MyData) parent.getItemAtPosition(position);
    valueTextView.setText( d.getValue() );
}
public void已选中(
AdapterView父级、视图、整型位置、长id){
MyData d=(MyData)parent.getItemAtPosition(position);
valueTextView.setText(d.getValue());
}
我创建了一个HashMap用于这些场景。另请参见示例项目

mapData=newlinkedhashmap();
mapData.put(“shamu”、“nexus6”);
mapData.put(“河豚”、“Nexus播放器”);
mapData.put(“volantisg”、“Nexus9(LTE)”);
mapData.put(“volantis”、“Nexus9(Wi-Fi)”);
mapData.put(“锤头”、“Nexus5(GSM/LTE)”);
mapData.put(“razor”,“Nexus 7[2013](Wi-Fi)”);
mapData.put(“razorg”,“Nexus 7[2013](移动)”);
mapData.put(“mantaray”、“nexus10”);
mapData.put(“occam”、“nexus4”);
mapData.put(“nakasi”、“nexus7(Wi-Fi)”);
mapData.put(“nakasig”,“nexus7(移动)”);
mapData.put(“钨”、“NexusQ”);
adapter=新LinkedHashMapAdapter(此,android.R.layout.simple\u微调器\u项,mapData);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
微调器=(微调器)findViewById(R.id.spinner);
旋转器。设置适配器(适配器);
spinner.setOnItemSelectedListener(此);

您能否提供有关上述操作原理的更多详细信息?您可以使用名称和值设置自定义数据结构,并将其传递给微调器适配器。。但是为什么适配器会显示值呢?我也需要这个,并设置了一个简单的库来实现这一点——带键和值的微调器:您能告诉我如何获取选定的键和值吗
    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);