Android将Spinner绑定到类

时间:2010-03-18 04:02:10

标签: android spinner

我在使用Spinner小部件时遇到了一些麻烦。给出以下代码:

    ArrayList<Person> people= new ArrayList<Person>();

    Person = null;
    for(int i = 0; i!= 10; i++) {
        p = new Person();
        s.setID(i);
        s.setName("Name " + i);
        people.add(s);
    }

我正在使用以下代码将其绑定到Spinner:

 Spinner spinner1 = (Spinner) findViewById  (R.id.spinner);       
 ArrayAdapter<Person> adapter = new ArrayAdapter<Person>(this, android.R.layout.simple_spinner_item, people);                           
 spinner1.setAdapter(adapter);  

我想要的是隐藏值(id),但在选中时传递,以及要显示的名称。任何帮助表示赞赏。

感谢。

2 个答案:

答案 0 :(得分:11)

如果我正确理解您的问题,您希望该名称显示在微调器下拉视图中。选择项目后,您希望返回ID。

有两种方法可以解决这个问题。

最简单的方法是实现一个toString(),它返回Person对象中的名称。将对象的文本值绑定到下拉视图时,ArrayAdapter将返回此值。 然后在您的活动中,您可以为Spinner设置onItemClickListener并调用adapter.getItemAtPosition(position)来检索Person对象。从那个人的对象,你可以得到你的身份。

第二种方法是扩展ArrayAdapter并实现getView和getDropDownView以及getItem方法。 getView负责创建单击微调器时看到的行。 getDropDownView负责创建您在微调器中看到的视图。并且getItem方法将返回对象,或者在您的情况下返回指定位置的id。您应该将Person元素的名称绑定到getView和getDropDownView方法中的textview。在创建自定义ArrayAdapter之后,您应该为Spinner设置onItemClicKListener并按照我上面提到的那样处理它。

第一种方法很简单,但第二种方法非常优越,可以更好地控制适配器,特别是当你开始开发更复杂的东西时。

希望有所帮助。

答案 1 :(得分:2)

很老的帖子 - 只是偶然发现了其他的东西 - 注意到一个错误(可能就是疏忽)

jagsund大多是正确的,接受,他得到了getView和GetDropDownView的定义错误 - 它实际上与他所说的相反:getView显示了微调控件内部的内容,getDropDownView创建了当你点击时看到的视图行旋转器。

所以,除非你点击微调器,否则getDropDownView甚至不会被调用 - 如果你重写ArrayAdapter,你会看到这个