2013-10-25 5 views
0

Я хочу, чтобы мое приложение восстанавливало соединение Bluetooth при изменении ориентации экрана. У меня есть объект SavedState, который содержит данные о последовательном обслуживании BT и т. Д., Которые я могу сохранить с помощью onRetainNonConfigurationInstance() и восстановить с помощью getLastNonConfigurationInstance(), но мои поля TextView больше не обновляются при изменении ориентации экрана.TextViews исчезают при использовании onRetainNonConfigurationInstance()

У меня есть два xml-файла для макета - один в макете-порту и один в папках с макетами, чтобы переформатировать представления. Идентификаторы TextView идентичны в обоих файлах xml, только их позиции меняются.

Если я прокомментирую вызов переопределенного onRetainNonConfigurationInstance(), TextViews снова видны, но, конечно, я больше не могу снова подключаться к устройству BT.

Служба BT прекращается при вызове функции onDestroy(), поэтому ее необходимо восстановить при каждом изменении экрана.

Переопределенные вызовы onRestoreInstanceState() и onSaveInstanceState() кажутся неэффективными.

Может ли кто-нибудь указать мне в правильном направлении, пожалуйста? Исчезающие взгляды постоянны, т. Е. Переход от одной ориентации и обратно не восстанавливает TextViews.

+0

Не использовать onRetainNonConfigurationInstance (и получить). Они устарели. –

+0

Вы используете одно действие или Фрагменты? –

+0

И ... разместите часть своего кода ACtivity (или фрагмента). –

ответ

0

При изменении ориентации устройства вид снимается с экрана (который никогда не отображается снова) и воссоздается. То же самое происходит с соответствующей Деятельностью. Теперь невидимые взгляды и активность будут собирать мусор только тогда, когда их больше не ссылают. Текст в текстовых представлениях сохраняется системой при условии, что представления имеют уникальные идентификаторы. Тот факт, что представления воссозданы, означает, что вы снова должны выполнить findViewById().

Теперь, с точки зрения MVC, Activity является контроллером . Ваше соединение Bluetooth определенно входит в состав Модель (он должен пережить изменения ориентации). Поэтому не храните данные, связанные с Bluetooth, в Activity. Вы можете использовать, скажем, статическую переменную или поле в вашем подклассе Application, или все, что вам подходит. Что касается MVC View, это то, что вы указываете через XML; в принципе вы можете определить свои пользовательские классы, такие как MyCustomButton, но обычно вы просто повторно используете существующий материал.

Смежные вопросы