Intereting Posts
API Google Places для Android Ошибка: статус {statusCode = NETWORK_ERROR, разрешение = null} Разрешение читать данные с SD-карты Как удалить пространство между строками сетки в android Oauth 2 в приложении для Android Рисунок холста не рисуется правильно, несмотря на заданные свойства Кодировка UTF-8 в WebView и ICS Отправить пользовательский объект с помощью встроенного Android Binder Ndk-stack: невозможно открыть файл символа … /../ libutil.so. Ошибка (9): неправильный дескриптор файла Самые популярные размеры экрана / разрешения на телефонах Android Возможно ли отслеживать HTTP-трафик на Android, зная, какое приложение генерирует запросы? Android Studio Unit Testing: не удается найти инструментарий ИЛИ класс не найден ex Получить путь к файлу из пойманного намерения DownloadManager Полностью закрытие приложения Android для мобильного телефона Android RelativeLayout изменяет высоту программно Анимация повторного импульса

Сохранение списка в списке фрагментов при изменении ориентации

У меня есть приложение, использующее фрагменты, все из которых содержатся в одном действии. Действие начинается с фрагмента, содержащего меню кнопок, из-за чего различные фрагменты списка заменяют исходный фрагмент кнопки / меню.

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

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

Ниже приведен код, упрощающий отображение основной активности и одного из списков.

Любые указатели на то, что добавить, где это сделать, чтобы фрагмент списка был сохранен, будет с большой благодарностью.

Мероприятия

 public class Main extends FragmentActivity { private MainMenuFragment menu; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); menu = new MainMenuFragment(); getSupportFragmentManager().beginTransaction().replace(R.id.pane, menu).commit(); } } 

ListFragment

 public class ItemListFragment extends ListFragment { private TextView header; private TextView empty; private Button add; public static Cursor itemCursor; private GroceryDB mDbHelper; public static long mRowId; public static CheckCursorAdapter lists; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.common_list, container, false); header = (TextView) v.findViewById(R.id.header); empty = (TextView) v.findViewById(android.R.id.empty); header.setText(R.string.header_item); empty.setText(R.string.empty_items); return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mRowId=0; mDbHelper = new GroceryDB(getActivity()); mDbHelper.open(); itemCursor = mDbHelper.fetchAllItems(); getActivity().startManagingCursor(itemCursor); String[] from = new String[] { GroceryDB.ITEM_NAME }; int[] to = new int[] { R.id.ListItem }; lists = new CheckCursorAdapter(getActivity(), R.layout.listlayout_itemlist, itemCursor, from, to); setListAdapter(lists); } } 

Solutions Collecting From Web of "Сохранение списка в списке фрагментов при изменении ориентации"

Как обойти его и сохранить список / текущий фрагмент списка с помощью изменения ориентации

Вы слепо заменяете фрагмент каждый раз, когда onCreate() . Вместо этого добавьте / замените фрагмент, если savedInstanceState() имеет значение null . Если это не null , вы возвращаетесь из конфигурации, и ваши существующие фрагменты будут воссозданы (или, если они были сохранены, они уже есть).

setRetainInstance(true) означает, что сам фрагмент будет сохранен через изменения конфигурации, вместо того, чтобы быть уничтожен / воссоздан, как и активность. Однако он все равно будет вызываться с помощью onCreateView() . В вашем коде это означает, что ваши элементы данных ItemListFragment будут придерживаться, но вам все равно нужно будет вызвать setListAdapter() даже если вы не запрашиваете базу данных.

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

Таким образом, он сохраняет данные при воссоздании активности (и listfragment), и вы можете просто проверить, есть ли у нее какие-либо данные в вашем oncreate. Если list == null или list.size < 0 вы выполняете как обычно и получаете данные, как обычно. В противном случае вы просто установите свой список с данными, которые у него уже есть.

Для меня это намного проще, и, увидев, что Eclipse автоматически создает подобный класс DummyContent для ваших данных при создании проекта проекта / проекта потоковой передачи android, в основном это требует только изменения встроенного фрагмента вашего списка.