2

Я работаю над приложением планшета с двумя фрагментами в основном действии. Левый фрагмент - это фрагмент списка, содержимое которого обновляется, когда пользователь выбирает вкладку или выбирает элемент из 2 прядильщиков в ActionBar.Изменение ориентации ориентации панели действий Android - вызовы tabSeleceted & ItemSelected методы

Первоначально я обработал изменение ориентации, переопределив onConfigurationChanged. Поскольку это не рекомендуется Google, и это вызывает проблемы с ActionBarSherlock, я начал работу над тем, чтобы делать это правильно. Я установил, чтобы мои фрагменты сохраняли свой экземпляр (setRetainInstance) для изменений ориентации.

Проблема в том, когда ориентация изменяет метод OnCreate для активности, добавляет вкладки в панель действий и выбирает один, вызывающий перезагрузку списка. Это также происходит с прядильщиками, так как при вращении выбирается новый элемент. При изменении ориентации фрагмент списка не нуждается в обновлении.

Я знаю, что можно сохранить вкладку и состояние счетчика, но как остановить список от обновления, поскольку это делается в методах onTabSelected и onItemSelected?

ответ

1

Как насчет использования onRetainNonConfigurationInstance(), чтобы сохранить состояние, которое не должно меняться при изменении ориентации? Например, если вы следуете @ThomasKJDK's answer, вы можете установить boolean в этом методе. Затем вы можете получить это boolean в onCreate(); и принять решение о выполнении различных сегментов кода на основе этого boolean.

Подробнее об этом подходе here.

+0

Мне удалось сделать это, сохранив целое число из числа изменений в панели действий. Я сохраняю это значение в методе onSaveInstanceState. Затем я получаю это в oncreate. В методах onTabSelected и onItemSelected я проверяю этот счетчик, если он больше 0, я уменьшаю его, а затем возвращаю без какого-либо серьезного обновления. Тип как семафор счёта, но без потоков :) – bencallis

1

Я не знаю, правильно ли это это сделать, но вы можете создать локальную переменную (булевую), которая устанавливается после первого OnCreate и сбрасывается при OnPause/OnDestroy. Затем вы можете использовать созданную переменную, чтобы исключить выполнение некоторых сегментов кода в методе onCreate.

+1

Я устал от этого, но проблема в том, когда я его верну? Скажите, повернуть, если вызываются как метод onTabSelected, так и метод onItemSelected, который следует установить для boolean в false? Ориентация на Android - такая боль! – bencallis