Могу ли я заставить раскрывающийся вид счетчика оставаться видимым при изменении ориентации? - PullRequest
4 голосов
/ 23 ноября 2010

Я не знаю, ясно ли из заголовка, что я спросил, поэтому вот несколько шагов для воспроизведения (при условии, что у вас есть макет со счетчиком):

  1. Нажмите на счетчик> Откроется раскрывающийся список.
  2. Поворот устройства из портретной в альбомную (или наоборот)> список закрывается.

Моя проблема в том, что я хотел бы сохранить список открытым после вращения устройства. Я знаю, что это обычно возможно, если переопределить onConfigurationChanged , но я определил другой макет для ландшафтного режима, поэтому в моем методе onConfigurationChanged я должен вызвать setContentView и установить адаптер для альбомный регулятор, закрывающий раскрывающийся список, открытый в портретном режиме.

Есть ли способ предотвратить закрытие раскрывающегося списка или, возможно, заставить его отображаться после вращения устройства?

Ответы [ 2 ]

6 голосов
/ 24 ноября 2010

Я нашел очень уродливое решение для этого («действие» происходит в методе onConfigurationChanged ):

  1. Перед вызовом setContentView проверьте, отображается ли раскрывающийся список (*) и, если это так, сохраните позицию, выбранную в данный момент в счетчике (int pos = spinner.getSelectedItemPosition()) ).

  2. После вызова setContentView и установки адаптера счетчика, если раскрывающийся вид был показан на шаге 1, принудительно отобразите раскрывающийся вид, вызвав executeClick на счетчике:

    spinner.setSelection(pos);// this way we make sure that the same item
                              // remains selected after rotating the device
    spinner.performClick(); //show the dropdown view 
    

(*) Проверка, отображается ли раскрывающийся список, является более сложной частью. Я не нашел (пока) метод, который позволяет мне узнать, отображается ли раскрывающийся вид, поэтому мне пришлось сделать следующее:

  • Удерживать нажатое состояние счетчика в логической переменной (например, с именем isClicked ).

  • Установите onTouchListener для счетчика и в методе onTouch установите isClicked в значение true (при касании счетчика открывается окно dropdwon, isClicked == true означает, что отображается раскрывающийся список).

  • Переопределить onKeyDown или onKeyUp и при нажатии кнопки назад, если isClicked имеет значение true, установите его в значение false (я предполагал, что нажатие назад isClicked == true означает закрытие раскрывающегося списка).

  • Используйте значение isClicked в onConfigurationChanged , чтобы проверить, отображается ли раскрывающийся список.

Как я уже сказал, это ужасное исправление, но это единственное, что я мог придумать до сих пор. Если у кого-то есть другие идеи, пожалуйста, напишите их.

0 голосов
/ 23 ноября 2010

По умолчанию при переключении с портретного на альбомный режим перезапускается ваша активность.Таким образом, вы можете сохранить состояние счетчика где-нибудь, например, в SharedPreferences и прочитать его при перезапуске действия (в методах onCreate () или onResume ()).

...