Android - Выпадающий текст / выбор Счетчика не показывает

Я использую этот код кода для заполнения Счетчика. Данные считаны с базы данных. Выбор отображается правильно - в этом случае, он показывает "Зеленый" и "Красный".

    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 ниже: enter image description here

Что-нибудь я могу отсутствовать?

5
задан mmBs 4 March 2014 в 09:02
поделиться

2 ответа

Хорошо, происходит то, что при вызове 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; однако это, вероятно, излишне для простого результата, которого вы пытаетесь достичь.

3
ответ дан 14 December 2019 в 18:58
поделиться

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);

alt text

Но теперь, если я начал с Сначала 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);

Большое спасибо за вашу помощь.

0
ответ дан 14 December 2019 в 18:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: