Не могу заставить работать спиннер по умолчанию - почему? - PullRequest
0 голосов
/ 21 декабря 2018

Значение по умолчанию Spinner не работает, оно отображается пустым. У меня есть setAdapter до setSelection, но все равно оно не работает.

ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, spinnerArray);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

CategorySpinner.setAdapter(adapter);
CategorySpinner.setSelection(0);

spinnerArray инициализируется в этом методе:

public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
if (data.moveToFirst()) { 
do { 
    int categoryNameColumnIndex = 
    data.getColumnIndex(CategoryBaseColumns.CATEGORY_NAME); 
    spinnerArray.add(data.getString(categoryNameColumnIndex)); 
    //Log.e(data.getString(categoryNameColumnIndex)) 
    } while (data.moveToNext()); 
   } 
 } 

1 Ответ

0 голосов
/ 21 декабря 2018

Больше контекста было бы полезно, но из того, что я вижу, я предполагаю, что ваш spinnerArray заполнен асинхронно.Это означает, что spinnerArray, который вы передаете ArrayAdapter, пуст и элементы добавляются в него только после вызова onLoadFinished, но ArrayAdapter никогда не уведомляется об этом.

Что япредложил бы взять инициализацию ArrayAdapter и переместить ее в отдельный метод и вызвать его в методе onLoadFinished.

Пример:

public void setSpinnerData(ArrayList<String> spinnerArray) {
    ArrayAdapter<String> adapter = new ArrayAdapter<>(
                this, android.R.layout.simple_spinner_item, spinnerArray);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    CategorySpinner.setAdapter(adapter);
    CategorySpinner.setSelection(0);
}

public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
    ArrayList<String> spinnerArray = ArrayList();
    if (data.moveToFirst()) { 
        do { 
            int categoryNameColumnIndex = data.getColumnIndex(CategoryBaseColumns.CATEGORY_NAME); 
            spinnerArray.add(data.getString(categoryNameColumnIndex)); 
            //Log.e(data.getString(categoryNameColumnIndex)) 
        } while (data.moveToNext()); 
    }
    setSpinnerData(spinnerArray);
} 
...