Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在微调器控件中存储ID_Java_Android_Ormlite - Fatal编程技术网

Java 在微调器控件中存储ID

Java 在微调器控件中存储ID,java,android,ormlite,Java,Android,Ormlite,我使用ormlite从sqlite绑定微调器控件和数据项,方法如下: public void addItemsOnSpinner() { DatabaseManager.init(this); spinner = (Spinner) findViewById(R.id.spinner2); List list = new ArrayList(); List<Countries> cList = Databa

我使用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);
    }
public void addItemsOnSpinner()
{
DatabaseManager.init(this);
微调器=(微调器)findViewById(R.id.spinner2);
列表=新的ArrayList();
List cList=DatabaseManager.getInstance().getAllCountry();
适用于(国家c:cList)
{
list.add(c.getcName());
}
ArrayAdapter dataAdapter=新的ArrayAdapter(这是android.R.layout.simple\u微调器\u项,列表);
dataAdapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉项);
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);
List List=new ArrayList();
列表ID=新的ArrayList();
List cList=DatabaseManager.getInstance().getAllCountry();
适用于(国家c:cList)
{
list.add(c.getcName());
add(c.getcID());
}
ArrayAdapter dataAdapter=新的ArrayAdapter(这是android.R.layout.simple\u微调器\u项,列表);
dataAdapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉项);
spinner.setAdapter(dataAdapter);
spinner.setTag(id);

这样行吗?另外-如何获取当前选择标记?对于获取当前项,我使用了:
String.valueOf(spinner.getSelectedItem())
但是如何读取当前标记以获取我的id?

您可以在
微调器的标记中存储记录id。这样做:

int[] recordIds = new int[5];
//init recordIds array
spinner.setTag(recordIds);
int[] recordIds = (int[]) spinner.getTag();
int recordIdOfselectedItem = recordIds[spinner.getSelectedItemPosition()];
您可以获得针对以下国家的身份证:

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

如您所见,
country
的索引n映射到
recordId
的索引n。您只需创建名称和id作为属性的“country”自定义模型。将此自定义国家/地区列表绑定到微调器。请检查此链接

您可以使用
列表
存储与国家/地区相关的额外值。但是您必须为spinner使用
自定义适配器
。有什么样的例子吗?@Paritosh也提出了一个很好的解决方案。或者你可以用我的方式,但它不是很优雅。@“如何阅读当前标签以获取我的id”我已经在我的答案中发布了它。请看第二段代码。谢谢,我错过了。我读了你的评论。我也有同样的问题。即使您正在使用
setTag()
它也不会直接映射到该记录的
id
。对吧?嗯,为什么不呢?如果所提供的国家/地区列表和记录ID列表基本上代表0、1、2……的相同条目。。。然后,如果中间的一些记录是从表中的“代码>删除”/代码> d,它将中断。现在,删除id后,代码将指向错误的
id
sposition@ParitoshOP并没有提到这样一个特性。从数据库中删除项,然后将所有值再次绑定到下拉列表,这难道还不够吗?所有旧项目数据都将替换为当前项目数据,包括ids谢谢,我将检查此项