2011-03-24 54 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

相關問題