在Spinner中选择条目 - Android

问题描述:

我有一个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

项目类

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

制作您自己的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

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()); 
} 

创建新的枚举:

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());