У меня есть список имен учетных записей и счетчик. Как мне заполнить счетчик списком? - PullRequest
0 голосов
/ 26 июля 2011

Я борюсь со списками Android и с тем, как конвертировать их для использования в Spinner. Поместить строковый массив в Spinner очень просто, поэтому я подумал, что сделать то же самое со списком также будет просто. Однако в настоящее время я не могу понять, как получить список в правильном формате для использования с ArrayAdapter Spinner.

Вот мой код для получения списка имен учетных записей из базы данных:

//---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;
    }

Из возвращенного списка, что мне нужно сделать, чтобы заполнить мой счетчик? Следующий код, очевидно, предназначен для строкового массива, однако я заблудился относительно того, что мне нужно сделать, чтобы список работал с аналогичной функциональностью. Вот мой нерабочий код 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 ожидает массив строк, однако, как я уже сказал, мне нужен хороший толчок в правильном направлении. Очевидно, мне нужно либо преобразовать мой список в строковый массив, либо изменить способ адаптации Spinner к списку. Мне было довольно сложно понять Android, там много структур данных и гораздо больше правил типов данных, чем я использую для получения PHP-фона.

Ваша помощь очень ценится!

Ответы [ 3 ]

2 голосов
/ 26 июля 2011

Используйте toArray, чтобы преобразовать ваш список в массив.

List<String> list = new ArrayList<String>(); // Your list
// Populate it

// Then get an array:
String[] array = list.toArray( new String[0] );
2 голосов
/ 26 июля 2011

Если 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);
1 голос
/ 26 июля 2011

У меня была похожая проблема, и вместо того, чтобы переходить от списка к счетчику, я просто изменил способ извлечения из своей базы данных, я написал другой метод, который возвращает количество строк в моей базе данных:

public int RowCount() {
    String count = "Select COUNT(_id) from " + TABLE_NAME;
    return (int) db.compileStatement(count).simpleQueryForLong();
}

Затем я объявил массив:

String []myArray = new String[db.RowCount()];

Затем я заполнил этот массив курсором, как кажется, вы уже знаете, как это сделать.

...