我正在努力使用Android列表以及如何将它们转换为在Spinner中使用。将字符串数组放入Spinner非常简单,因此,我认为对List执行相同操作也很简单。但是,此时我无法弄清楚如何将List放入适合Spinner的ArrayAdapter使用的格式。
这是我从数据库中获取帐户名列表的代码:
//---retrieves all the accounts matching the account_type---
public List getAccounts(String account_type) {
List<String> list = new ArrayList<String>();
Cursor cursor = this.db.query(DBACCOUNTS, new String[] {
ID,
ACCOUNTTYPE,
ACCOUNTNUMBER,
ACCOUNTNAME},
ACCOUNTTYPE + " = " + "'" + account_type + "'",
null,
null,
null,
null,
null);
if (cursor.moveToFirst()) {
do {
//---account_name column number is 3---
list.add(cursor.getString(3));
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
return list;
}
从返回的“列表”中,我需要做些什么来填充我的微调器?下面的代码显然是一个字符串数组,但是,我很遗憾我需要做些什么来使List工作具有类似的功能。这是我的非工作ArrayAdapter代码(account_name_array被设置为上面返回的“列表”):
account_name_spinner = (Spinner) findViewById(R.id.account_name_spinner);
account_name_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, account_name_array);
account_name_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
account_name_spinner.setAdapter(account_name_adapter);
我知道我在这里偏离轨道,我知道ArrayAdapter期待一个字符串数组,但是,就像我说的那样,我需要在正确的方向上进行良好的推动。显然我需要将我的List转换为字符串数组,或者改变我将Spinner改编为List的方式。 Android对我来说很难掌握,有很多数据结构和更多的数据类型规则,而不是我从PHP背景中使用的。
非常感谢您的帮助!
答案 0 :(得分:2)
使用toArray
将您的列表转换为数组。
List<String> list = new ArrayList<String>(); // Your list
// Populate it
// Then get an array:
String[] array = list.toArray( new String[0] );
答案 1 :(得分:2)
如果account_name_array是一个ArrayList,则需要将其转换为String []并将其传递给适配器。
String[] account_names = account_name_array.toArray(new String[account_name_array.size()]);
account_name_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, account_names);
答案 2 :(得分:1)
我有一个类似的问题,而不是从列表转到微调器,我只是改变了我从数据库中提取的方式,我写了另一个返回数据库中行数的方法:
public int RowCount() {
String count = "Select COUNT(_id) from " + TABLE_NAME;
return (int) db.compileStatement(count).simpleQueryForLong();
}
然后我声明了一个数组:
String []myArray = new String[db.RowCount()];
然后我使用光标填充该数组,因为您似乎已经知道该怎么做。