我有一个帐户名列表和一个微调器,如何使用列表填充微调器?

时间:2011-07-26 03:16:57

标签: android list spinner

我正在努力使用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背景中使用的。

非常感谢您的帮助!

3 个答案:

答案 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()];

然后我使用光标填充该数组,因为您似乎已经知道该怎么做。