spinner控件中的存储id

f1tvaqid  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(268)

我使用ormlite从sqlite绑定微调器控件和数据项,方法如下:

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呢?

4ngedf3f

4ngedf3f1#

您可以将记录id存储在 Spinner . 这样做:

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

你可以根据这样的国家获得身份证:

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

如你所见,指数n country Map到的索引n recordId .

0g0grzrc

0g0grzrc2#

您可以简单地创建“country”自定义模型,并将name和id作为属性。将此自定义国家/地区列表绑定到微调器。请检查将自定义对象绑定到微调器的链接

相关问题