将id存储在微调控件中

时间:2015-04-28 07:23:37

标签: java android ormlite

我使用ormlite从sqlite绑定spinner控件和数据项,这样:

 public void addItemsOnSpinner()
    {
        DatabaseManager.init(this);

        spinner = (Spinner) findViewById(R.id.spinner2);
        List list = new ArrayList();

        List<Countries> cList = DatabaseManager.getInstance().getAllCountry();


        for (Countries c : cList)
        {
            list.add(c.getcName());

        }
        ArrayAdapter dataAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, list);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(dataAdapter);
    }

基本上,国家/地区名称被设置为我的微调器控件的项目。它有效,但我对此不满意,因为我只能通过在微调器中选择的标签来确定当前选择。显然,它并不好,因为国名不能保证是独一无二的(它只是教育方面的简单应用程序)。

最好的解决方案是在我的微调器中存储国家名称(作为用户可见的微调器标签)和相应的记录ID。 Id是自动生成的值,当然它是唯一的,因此它可用于确定选择并从数据库读取所有其他属性,使用id值,或编辑选择的记录并将新信息保存到数据库。

我知道如何通过id读取/编辑记录。但我不知道如何在我的微调器中存储相应的记录ID,以了解实际选择了哪个项目以及如何查询数据库。

有什么想法吗?

我的微调控件被声明为:

<Spinner
        android:id="@+id/spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:prompt="@string/select2" />

我添加了存储ID作为标记,所以:

List list = new ArrayList();
        List ids = new ArrayList();

        List<Countries> cList = DatabaseManager.getInstance().getAllCountry();


        for (Countries c : cList)
        {
            list.add(c.getcName());
            ids.add(c.getcID());

        }
        ArrayAdapter dataAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, list);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(dataAdapter);
        spinner.setTag(ids);

这可以吗?另外 - 如何获取当前选择标签?要获取我使用的当前项目:String.valueOf(spinner.getSelectedItem())但是如何读取当前标记以获取我的ID?

2 个答案:

答案 0 :(得分:1)

您可以在Spinner的代码中存储记录ID 。做这样的事情:

int[] recordIds = new int[5];
//init recordIds array
spinner.setTag(recordIds);

您可以通过以下国家/地区获取ID:

int[] recordIds = (int[]) spinner.getTag();
int recordIdOfselectedItem = recordIds[spinner.getSelectedItemPosition()];

如您所见,country的索引 n 映射到recordId的索引 n

答案 1 :(得分:1)

您可以简单地创建&#34;国家&#34;名称和id作为属性的自定义模型。将此自定义国家/地区列表绑定到您的微调器。请查看此链接binding custom objects to spinner