Я использую этот код кода для заполнения Счетчика. Данные считаны с базы данных. Выбор отображается правильно - в этом случае, он показывает "Зеленый" и "Красный".
Spinner spinnerColor = (Spinner) findViewById(R.id.spinnertProfile);
mProfileDbHelper = new ProfileDbAdapter(this);
mProfileDbHelper.open();
Cursor profilesCursor = mProfileDbHelper.fetchAllProfiles();
startManagingCursor(profilesCursor);
// Create an array to specify the fields we want to display in the list
String[] from = new String[] { ProfileDbAdapter.COL_PROFILE_TITLE };
// and an array of the fields we want to bind those fields to
int[] to = new int[] { R.id.textviewColors };
// Now create a simple cursor adapter and set it to display
SimpleCursorAdapter profilesAdapter = new SimpleCursorAdapter(this,
R.layout.profile_color, profilesCursor, from,
to);
spinnerColor.setAdapter(profilesAdapter);
}
Однако, когда я изменился для использования другого андроида расположения. R.layout.simple_spinner_dropdown_item. Текст Счетчика исчез.
// Now create a simple cursor adapter and set it to display
SimpleCursorAdapter profilesAdapter = new SimpleCursorAdapter(this,
R.layout.profile_color, profilesCursor, from,
to);
profilesAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerColor.setAdapter(profilesAdapter);
Посмотрите снимки без и с simple_spinner_dropdown_item ниже:
Что-нибудь я могу отсутствовать?
Хорошо, происходит то, что при вызове setDropDownViewResource
вы заменяете макет, который вы ранее указали в конструкторе. В вашем случае R.layout.profile_color
. SimpleCursorAdapter
расширяет ResourceCursorAdapter
и в конструкторе устанавливает два макета равными друг другу.
public ResourceCursorAdapter(Context context, int layout,
Cursor c, boolean autoRequery) {
super(context, c, autoRequery);
mLayout = mDropDownLayout = layout;
mInflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
Проблема возникает, когда вы вызываете setDropDownViewResource
и изменяете макет выпадающего окна. SimpleCursorAdapter
будет продолжать использовать те же привязки id ресурсов, которые вы указали в конструкторе.
Что вам следует сделать, так это указать макет только в конструкторе SimpleCursorAdapter
. Я предлагаю изменить ваш код следующим образом:
String[] from = new String[] { ProfileDbAdapter.COL_PROFILE_TITLE };
int[] to = new int[] { android.R.id.text1 }; // from simple_spinner_dropdown_item
SimpleCursorAdapter profilesAdapter = new SimpleCursorAdapter(this,
android.R.layout.simple_spinner_dropdown_item, profilesCursor, from, to);
spinnerColor.setAdapter(profilesAdapter);
Чтобы получить желаемые результаты.
В основном не используйте метод setDropDownViewResource
. Или, если вы это сделаете, и измените привязку id ресурса, вам придется вызвать SimpleCursorAdapter#changeCursorAndColumns
; однако это, вероятно, излишне для простого результата, которого вы пытаетесь достичь.
Qberticus,
Да, вы правы насчет привязки идентификатора ресурса !!
Однако, если я начал с android.R.layout.simple_spinner_dropdown_item , очевидно, что раскрывающийся список будет отображаться, но это не очень красиво: -)
String[] from = new String[] { ProfileDbAdapter.COL_PROFILE_TITLE };
int[] to = new int[] { android.R.id.text1 }; // from simple_spinner_dropdown_item
SimpleCursorAdapter profilesAdapter = new SimpleCursorAdapter(this,
android.R.layout.simple_spinner_dropdown_item, profilesCursor, from, to);
spinnerColor.setAdapter(profilesAdapter);
Но теперь, если я начал с Сначала simple_spinner_item , затем setDropDownViewResource
до элемент simple_spinner_dropdown , теперь он отображает именно то, что я ищу.
String[] from = new String[] { ProfileDbAdapter.COL_PROFILE_TITLE };
int[] to = new int[] { android.R.id.text1 }; // from simple_spinner_dropdown_item
SimpleCursorAdapter profilesAdapter = new SimpleCursorAdapter(this,
android.R.layout.simple_spinner_item, profilesCursor, from, to);
profilesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerColor.setAdapter(profilesAdapter);
Большое спасибо за вашу помощь.