【问题标题】:Setting ID for Spinner items设置 Spinner 项目的 ID
【发布时间】:2011-04-26 14:50:16
【问题描述】:

我有一个要填充 Spinner 对象的字符串数组。但是,我想为 Spinner 的每个元素附加一个 ID,因此当用户选择一个项目时,我有它的 ID 可用于保存到其他一些数据。我该怎么做?

【问题讨论】:

  • 没看懂,spinner 或者数组位置不够用作id?
  • 这是一个特定于 Spinner 中项目的 ID。可能是 1;它可能是 93847549387925187。它是一个数据库主键。
  • 安德鲁我也有同样的问题...如果您有问题的答案,请帮助我...

标签: android spinner


【解决方案1】:

创建一个 StringWithTag 类并用它代替列表中的字符串名称,如下所示:-

public class StringWithTag {
    public String string;
    public Object tag;

    public StringWithTag(String stringPart, Object tagPart) {
        string = stringPart;
        tag = tagPart;
    }

    @Override
    public String toString() {
        return string;
    }
}

在将项目添加到微调器部分:-

List<StringWithTag> list = new ArrayList<StringWithTag>();
list.add(new StringWithTag("Oldman", "12345"));
list.add(new StringWithTag("Umpire", "987654"));
list.add(new StringWithTag("Squad", "ABCDEE"));
ArrayAdapter<StringWithTag> adap = new ArrayAdapter<StringWithTag> (this, android.R.layout.simple_spinner_item, list);
....
....

在监听器中:-

public void onItemSelected(AdapterView<?> parant, View v, int pos, long id) {
    StringWithTag s = (StringWithTag) parant.getItemAtPosition(pos);
    Object tag = s.tag;
}

瞧! }

【讨论】:

  • @Robert... err... StringWithTag 是在上面的第一段代码中创建的。
  • 这个解决方案优雅而完美!这也实现了像 HTML 这样的 Spinner 键值
  • 正是我想要的。谢谢@mfc
  • 运行良好。我一直更喜欢内置结构,但是 android 在这方面缺少一个。
  • @Violet,所有类都继承自Object,toString是继承自Object的方法
【解决方案2】:

身份证是什么意思。您可以使用 ArrayAdapter 来填充 Spinner。选择项目后,只需从适配器获取元素并保存所需的数据。

Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<MyObject> adapter = ... // initialize the adapter
adapter.setDropDownViewResource(android.R.layout.some_view);
spinner.setAdapter(adapter);

当项目被选中时

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    MyObject selected = parent.getItemAtPosition(pos);
    // save any data relevant with selected item   
}

如果您将数据存储在 db 中,您可以使用 CursorAdapter 和 onItemSelected 从光标中获取所选项目的 ID。

【讨论】:

  • 如果我使用 CursorAdapter,我如何告诉它“名称”列是显示在列表中的文本?
【解决方案3】:

我认为您不能将任意 ID 附加到文本数组资源的元素(如果您正在使用的话)。

我认为附加此类 ID 的最简单方法是硬编码(如果您使用的是静态文本资源)或动态构建(如果您在运行时获取字符串)从 (String position in数组)->(主键)。

编辑:另一方面,Mojo Risin 有一个观点 - 您应该检查 CursorAdapter API 是否已经满足您的需求。

【讨论】:

    【解决方案4】:

    Andrew 嗨,好久不见,但值得写。

    你可以在SpinnerAdapter中为spinnerLayout充气时为每一行设置一个标签:

    spinnerView = inflater.inflate(spinnerLayout, parent, false);
    spinnerView.setTag("Your Tag");
    

    然后你可以得到标签:

    yourSpinner.getSelectedView().getTag();
    

    【讨论】:

      【解决方案5】:

      我认为最好的解决方案是再添加一个微调器并用 id 填充它,但让它的可见性消失

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2017-02-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多