将 id 存储在微调器控件中
Store ids in spinner control
我使用 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 值,或编辑选择的记录并将新信息保存到数据库。
我知道如何 read/edit 按 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?
您可以在 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。
您可以简单地创建 "Country" 具有名称和 ID 作为属性的自定义模型。将此自定义国家/地区列表绑定到您的微调器。请检查此 link binding custom objects to spinner
我使用 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 值,或编辑选择的记录并将新信息保存到数据库。
我知道如何 read/edit 按 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?
您可以在 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。
您可以简单地创建 "Country" 具有名称和 ID 作为属性的自定义模型。将此自定义国家/地区列表绑定到您的微调器。请检查此 link binding custom objects to spinner