2015-01-29 4 views
2

У меня есть MainActivity с ViewPager, на котором размещаются три вкладки, а их соответствующие классы расширяются Fragment. Одна из вкладок имеет компоновку с ListView, то расположение каждого элемента в ListView выглядит следующим образомКак сохранитьInstanceState представления, определенного в методе getView()

TextView, checkBox and imageview 

Это ListView имеет индивидуальный класс адаптера, который расширяет BaseAdapter.

Что я хочу сделать, это сохранить состояние проверки флажков ListView. в классе, который расширяет фрагмент I, переопределяет метод onSaveInstanceState, проблема в том, что checkbox определены в методе getview() в классе , который расширяет BaseAdapter! Я хочу знать, как сохранить состояние проверки флажков в методе «onSaveInstanceState»?

ответ

2

Я думаю, что вы можете не понимать цель BaseAdapter. BaseAdapter -derived классы предназначены для использования в качестве интерфейса между набором данных и AdapterView, в котором вы отображения информации этого набора данных (и/или взаимодействовать с ним.)

Имея это в виду, я бы думаю, самый простой способ выполнить то, что вы делаете, это отслеживать, проверяется ли элемент, используя boolean как часть набора данных. Например, если ваш набор данных равен ArrayList<SomeObjectYouMadeUp>, вы должны добавить член boolean в SomeObjectYouMadeUp; установите его во время CheckBoxOnCheckedChangeListener и используйте его, чтобы определить, должен ли визуально проверяться CheckBox во время getView().

Это может занять некоторое переосмысление вашего кода, но поверьте мне, вы, вероятно, захотите это сделать. Это можно сделать так, как вы описываете, но это будет непросто или надежно; вы захотите получить индивидуальный доступ к каждому видимому виду в своем AdapterView, используя the method described here, но снова я должен рекомендовать против этого.

Самая большая причина в том, что onSaveInstanceState встречается чаще всего при изменении конфигурации - например, при повороте экрана. Это означает, что почти наверняка неверное предположение, что вы будете показывать одни и те же представления. Скажем, что в портретной ориентации видны 10 видов и 5 видны в ландшафте. Таким образом, пользователь поворачивается в пейзаж - что мы получаем? Вы точно знаете? Вам нужно будет проверить каждый новый View на какую-то идентифицирующую информацию, которую вы, вероятно, также должны были оставить в onSaveInstanceState, - и что делать, если один из новых просмотров не был виден до поворота?

Список вопросов продолжается. Сделайте себе одолжение: сохраните состояние проверки с остальной частью вашего набора данных и дайте Android понять это для вас.

+0

Фактически я работаю над приложением с фиксированной ориентацией, и у меня есть вопрос, сохраняет ли saveinstancesate состояния, которые меня интересуют, и помогает вернуть их в последнее состояние, даже если я закрыл приложение и перезапустил приложение Это? Я хочу, чтобы мой вопрос был ясен. – rmaik

+0

Ваш вопрос ясен, но это не цель 'onSaveInstanceState()'. Вы не можете использовать его для постоянного сохранения данных; существует ряд ситуаций, в которых Android уничтожит действие и воссоздает его из-за изменения конфигурации (например, поворот экрана является примером, но есть много других, например, подключение устройства к доке для автомобилей). В этих ситуациях 'onSaveInstanceState()' используется для передачи данных в воссозданную активность, чтобы сделать переход настолько плавным, насколько это возможно. – sigmabeta

+0

Вы можете найти более подробную информацию о том, почему вы должны использовать 'onSaveInstanceState()' [здесь] (http://developer.android.ком/обучение/Основы/деятельности, жизненный цикл/recreating.html # SaveState). – sigmabeta