2

我在使用 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)但在选择时传递,并显示名称。任何帮助表示赞赏。

谢谢。

4

2 回答 2

11

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

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

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

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

第一种方法很简单,但第二种方法要优越得多,并且可以更好地控制您的适配器,尤其是当您开始开发更复杂的东西时。

希望有帮助。

于 2010-03-18T04:19:31.070 回答
2

非常老的帖子——只是偶然发现了别的东西——发现了一个错误(可能只是疏忽)

jagsund 基本上是正确的,接受,他对 getView 和 GetDropDownView 的定义是错误的——这实际上与他所说的相反:getView 显示微调器控件内的内容,getDropDownView 创建您在单击微调器时看到的视图行。

因此,除非您单击微调器,否则 getDropDownView 甚至不会被调用 - 如果您覆盖 ArrayAdapter,您会看到这一点

于 2011-03-08T21:06:33.807 回答