2011-03-24 57 views
47

这是正确的方式来实现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.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; 
    } 
} 
+0

我需要这个问题,以及与建立一个简单的库,做到了这一点 - 与微调键和值:https://github.com/delight-im/Android- KeyValueSpinner – caw 2014-05-02 04:56:30

回答

6

这是一种方法。 虽然我使用自己的适配器(从BaseAdpater继承),但我使用它的次数还是很多。 另一种方式会喜欢上面有一个索引(0,1,2等)映射到一个值,当你得到一个项目得到它的索引一口井,所以你可以检索它的值来自地图。 我更喜欢那个选项...

+2

您能提供关于上述工作原因的更多细节吗?您使用名称和值设置自定义数据结构并将其传递给SPinner适配器..但为什么适配器显示值? – 2013-04-23 14:06:37

2

创建地图一个键值,并采取在onItemSelected的值(可以获取通过spinner.getAdapter “密钥”()。的getItem(位置))。

3

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

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

我创建了一个HashMap的adapter在这些情况下使用。另见示例项目here

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); 
+0

你能告诉我如何获取选定的密钥和价值 – Rahul 2016-02-10 06:42:29

+0

https://github.com/ayvazj/hashadapter-android/blob/master/app/src/main/java/com/github/ayvazj/hashadapter/sample/ MainActivity.java#L130 – ayvazj 2016-02-11 07:10:07

相关问题