2012-03-14 70 views
2

我有一個ID和值的項目,我想將它們添加到微調框中。 所以當我選擇這個項目時,我會得到它的ID。我只能像下面那樣添加itemValue並獲取選定的字符串。在Spinner中選擇條目 - Android

任何人都可以給我這個解決方案嗎?

List<String> list = new ArrayList<String>(); 
       list.add("item 1"); 
       list.add("item 2"); 
       list.add("item 3"); 
       ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(
         this, android.R.layout.simple_spinner_item, list); 
       dataAdapter 
         .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       final Spinner sp = new Spinner(this); 
       sp.setAdapter(dataAdapter); 
+0

你想從微調得到什麼?你想獲得選擇的項目還是選擇的項目位置? – VenkaReddy 2012-03-14 10:24:48

+1

我有從REST中檢索的Item(id,value)。我想將它放入微調器中,並按值顯示項目。但是當我選擇了該項目後,我會將項目ID發回服務器(item.id與微調器中的位置無關) – TrungNguyen 2012-03-14 10:29:16

回答

8

項目類

public class items { 
private String name; 
private int id; 

public String getname() { 
    return name; 
} 
public void setname(String name) { 
    this.name = name; 
} 

public int getid() { 
    return id; 
} 
public void setid(int id) { 
    this.id =id; 
} 
@Override 
public String toString() { 
    return name; 
} 
} 

現在將項目添加到數組列表,這樣

List<items> values1=new ArrayList(); 
items comment = new items(); 
    comment.setname("name1"); 
    comment.setid("id1"); 
values1.add(comment); 
ArrayAdapter<items> dataAdapter = new ArrayAdapter<String>(
        this, android.R.layout.simple_spinner_item, list);... 

,你在你的代碼的確從這裏.. 集onitemselected聽衆像這樣...

sp.setOnItemSelectedListener(new OnItemSelectedListener() { 
@Override 
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
items item1 = (items)arg0.getItemAtPosition(arg2); 
int id= item1.id<---- get id here.. 
+0

而不是ArrayAdapter dataAdapter使用ArrayAdapter dataAdapter ... – 5hssba 2012-03-15 04:12:06

+0

感謝raju它現在工作,但我用答案=(答案)sp.getSelectedItem(); – TrungNguyen 2012-03-15 04:13:30

+0

:D srr我忘了:D – TrungNguyen 2012-03-15 04:27:16

0

製作您自己的pojo類Item並在其中添加兩個字段,id和name。
然後製作這些項目的列表併爲微調器編寫您自己的適配器,然後使用它。
當您點擊任何項目時,它會返回Item類的整個對象。

否則,如果項目ID是順序的,那麼您可以將它們與項目ID相匹配,並且可以繼續使用相同的實現,您現在已經完成了。

但是第一種方法是推薦的方法,因爲您正在使用面向對象的語言進行開發,並且您的數據結構必須在應用程序中表示您的需求的實際對象。

+0

我已經擁有該POJO並試圖使用ArrayAdapter 然後將其設置在微調器中。我在屏幕上獲得的信息是[email protected]。你能給我更多關於編寫我自己的適配器的細節嗎?謝謝akkilis – TrungNguyen 2012-03-14 10:50:39

+0

Srr爲我的壞英語:) – TrungNguyen 2012-03-14 10:52:04

+0

@raju:真誠的道歉,如果我是粗魯的,但我的意思是它。請不要介意:) – akkilis 2012-03-14 10:57:35

0
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) { 
    // TODO Auto-generated method stub 


    //code one 
    String arr[]=getResources().getStringArray(R.array.days); 

    text1.setText(arr[arg2]); 

    //or 

    //code two 
    text1.setText(((TextView)arg1).getText()); 
} 
0

創建新的枚舉:

public enum EnumerateThis { 
    ENUM1(0, "Use this like a value"), 
    ENUM2(1, "and first argumenta like an integer id"); 

    private Integer id; 
    private String descr; 

    private EnumerateThis (Integer id, String place){ 
     this.id = id; 
     this.descr = place; 
    } 

    public Integer getId() { 
     return id; 
    } 

    public String getDescr() { 
     return descr; 
    } 
} 

比使用微調適配器:

ArrayAdapter<EnumerateThis> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, EnumerateThis.values()); 
相關問題