Сохранения View во фрагменте при повороте экрана

Интерфейс, диалоги, темы, стили, меню
Ответить
Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Сохранения View во фрагменте при повороте экрана

Сообщение Fry » 06 апр 2015, 16:36

У меня внутри активити находится фрагмент. В последнем я выставляю setRetainInstance(true), чтобы не было нового инстанса фрагмента. Внутри фрагмента есть длинный список, который получает данные из сетевого запроса.

Я бы хотел, чтобы при повороте экрана:
1. Список не обнулялся
2. Позиция скроллинга списка оставалась на месте.

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

Всякие android:configChanges понятное дело, отметаю.

Как лучше всего это сделать?
Arbeit macht Fry

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Сохранения View во фрагменте при повороте экрана

Сообщение altwin » 06 апр 2015, 19:31

Только явно сохранять данные из адаптера в onSaveInstanceState:
[syntax=java5]String[] values = mAdapter.getValues();
savedState.putStringArray("myKey", values);[/syntax]
и если onSaveInstanceState != null то создавать новый инстанс адаптера с этими данными.
[syntax=java5]if (savedInstanceState != null) {
String[] values = savedInstanceState.getStringArray("myKey");
if (values != null) {
mAdaptor = new MyAdaptor(values);
}
}[/syntax]
Либо такскать за собой синглтон, хотя это и не желательно, решение с Retain фрагментом всегда лучше.
Ну а скролить можно getListView().setSelection(21); либо getListView().smoothScrollToPositionFromTop(position,offset,duration); Думаю тем же макаром можно и получить текущую активную позицию.

В общем вывод простой - все ручками :(
Изображение

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: Сохранения View во фрагменте при повороте экрана

Сообщение Fry » 07 апр 2015, 10:05

altwin, есть тут проблема с сохранением всех отдельных характеристик.

Во многих приложениях, которые мне попадаются, можно крутить экран как угодно. На списках, изображениях и вообще любых элементах. Все данные сохраняются и положение скроллинга экрана тоже сохраняется. Как-то трудно представить, что для каждого фрагмента пишутся "костыли" по сохранению отдельно данных. Ну и, как говорилось, удержание активити там явно не используется.

Может, мы что-то не знаем? :)
Arbeit macht Fry

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Сохранения View во фрагменте при повороте экрана

Сообщение doter.ua » 07 апр 2015, 10:13

Fry писал(а):altwin, есть тут проблема с сохранением всех отдельных характеристик.

Во многих приложениях, которые мне попадаются, можно крутить экран как угодно. На списках, изображениях и вообще любых элементах. Все данные сохраняются и положение скроллинга экрана тоже сохраняется. Как-то трудно представить, что для каждого фрагмента пишутся "костыли" по сохранению отдельно данных. Ну и, как говорилось, удержание активити там явно не используется.

Может, мы что-то не знаем? :)
Если на фрагментах однотипные данные, можно создать свой класс экстендс фрагмент и накодить там че-нить обобщенное для упрощения сейва.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Сохранения View во фрагменте при повороте экрана

Сообщение Mikhail_dev » 07 апр 2015, 10:55

Всякие android:configChanges понятное дело, отметаю.
А можно пояснить это "понятное дело" ?

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: Сохранения View во фрагменте при повороте экрана

Сообщение Fry » 07 апр 2015, 11:47

А можно пояснить это "понятное дело" ?
Ну как бы depricated считается этот подход. Даже если у нас все на фрагментах, и не нужно следить за правильной смены лэйоута в активити, на сколько я знаю, этот подход не безопасен для памяти.
Arbeit macht Fry

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Сохранения View во фрагменте при повороте экрана

Сообщение Mikhail_dev » 07 апр 2015, 12:27

Он вполне безопасен для памяти
Такие приложения как Google maps, pinterest и wunderlist, используют сохранение активности. У карту гугл правда это выглядит вот так
[syntax=xml]<activity android:alwaysRetainTaskState="true" android:configChanges="orientation|uiMode|screenSize|fontScale" android:label="@string/MAPS_APP_NAME" android:launchMode="singleTask" android:name="com.google.android.maps.MapsActivity" android:screenOrientation="user" android:theme="@style/GmmTheme">
...[/syntax]
И это три из трёх приложений, которые у меня под рукой, декомпилированные. Я также начинаю использовать данный подход - сохранение активности. Так приложение становится куда отзывчивее. И ваша проблема решится сама собой.

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: Сохранения View во фрагменте при повороте экрана

Сообщение Fry » 07 апр 2015, 13:48

Mikhail_dev, искушаете прям.
Он вполне безопасен для памяти
Ну вот, в частности http://stackoverflow.com/questions/7818 ... rientation
Edit: More importantly, though, as hackbod points out in the comments, your activity will also be restarted when your app is in the background and Android decides to free up some memory by killing it. When the user comes back to your app, Android will attempt to restart the activity in the same way it does if there was some other configuration change. If you can't handle that - the user will not be happy...
То есть, например, если приложение у нас свернуто, а память, выделенная на активити попала под очистику, то мы получим ошибку, т.к. активити пересоздаться не сможет. Приоритет для неочистки у свернутого приложения высокий, но не высший. Если так, то это должно приводить к утечкам памяти, так все, на что это активити ссылается будет недоступно для гарбич коллектора.

Я, честно говоря, это не проверял, но утверждения о "невосоздании" затертого активити видел в разных местах.

А еще почему не рекомендуют так делать - вариантов смены конфигурации много всяких, всех не предусмотреть. И могут вылезать разные странны баги у пользователей, если у них это происходит.
Arbeit macht Fry

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Сохранения View во фрагменте при повороте экрана

Сообщение Mikhail_dev » 07 апр 2015, 14:14

То есть, если приложение у нас свернуто, а память, выделенная на активити попала под очистику, то мы получим ошибку, т.к. активити пересоздаться не сможет. Приоритет для неочистки у свернутого приложения высокий, но не высший. Если так, то это должно приводить к утечкам памяти, так все, на что это активити ссылается будет недоступно для гарбич коллектора.
С чего это вдруг она не будет пересоздаваться? Она будет прекрасно пересоздана.
По ссылке не нашел ничего, что говорит об утечках памяти. Там лишь общие моменты говорят.
In many cases, people mistakenly believe that when they have an error that is being generated by an orientation change ("rotation"), they can simply fix it by putting in android:configChanges="keyboardHidden|orientation".
Они вот на что ссылаются, мол по этой причине плохо. И да, это плохо так решать проблему. Если падает при повороте, то надо решать проблему!

В итоге могу сказать что нет проблем с сохранением активности. Просто надо быть готовым к тому, что активность будет пересоздаваться (отключать все зависимости в onStart/onStop). И понимать, что вьюшка пересоздаваться не будет, поэтому там, где надо и View сменить при повороте, там не стоит сохранять активность. Хотя почему не стоит? Лично я создал вьюшку, где при повороте экрана просто прячу контейнер на вьюшке, тем самым манипулирую даже вьюшкой.
У вас может выгрузиться активность, это нормально. Но что с того? В onCreate заново создадится. Да, потеряется выбранная нумерация. Можете для этого еще и состояние активности сохранить.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Сохранения View во фрагменте при повороте экрана

Сообщение altwin » 07 апр 2015, 15:22

Fry писал(а):altwin, есть тут проблема с сохранением всех отдельных характеристик.

Во многих приложениях, которые мне попадаются, можно крутить экран как угодно. На списках, изображениях и вообще любых элементах. Все данные сохраняются и положение скроллинга экрана тоже сохраняется. Как-то трудно представить, что для каждого фрагмента пишутся "костыли" по сохранению отдельно данных. Ну и, как говорилось, удержание активити там явно не используется.

Может, мы что-то не знаем? :)
Ну вопервых это не костыли, а особенность работы fragment retain, по сути фрагмент просто не пересоздается и вы можете крутить экран как угодно в процессе. Другое дело, когда возникает проблема с отдельными элементами, но опять же, реализация для адаптера может быть непосредственно в самом адаптере учитывая пересоздание, а не новый вызов конструктора и тогда ничего таскать за собой не придется. Более того в классической MVP модели android сам по себе UI по сути - это совокупность View и Presenter, и если view перерисовывается при повороте экрана и смене ориентации, то presenter отвечающий за логику формирования этого view не меняется. Обычно тут находятся обсерверы, которые меняют состояние view только в случае наступления события, в противном же случая не важно что вы там крутите, view меняет только отрисовку содержимое константно.
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Сохранения View во фрагменте при повороте экрана

Сообщение altwin » 07 апр 2015, 15:33

Fry писал(а): То есть, например, если приложение у нас свернуто, а память, выделенная на активити попала под очистику, то мы получим ошибку, т.к. активити пересоздаться не сможет. Приоритет для неочистки у свернутого приложения высокий, но не высший. Если так, то это должно приводить к утечкам памяти, так все, на что это активити ссылается будет недоступно для гарбич коллектора.

Я, честно говоря, это не проверял, но утверждения о "невосоздании" затертого активити видел в разных местах.

А еще почему не рекомендуют так делать - вариантов смены конфигурации много всяких, всех не предусмотреть. И могут вылезать разные странны баги у пользователей, если у них это происходит.
Во первых активити которая прибита системой хоть и выгруженна из памяти, но по прежнему находится в стеке и при повторном вызове успешно пересоздается, процесс смены ориентации и другие подобные обрабатываются именно для того, чтобы избежать пересоздания. К примеру если вы нажали кнопку sign in и перевернули девайс в процессе пересоздание активити вызовет проблемы, ровно как и перезагружать данные либо заново начинать кеширование видеофайла -глупо. Проверить можно легко, емулятору можно запретить выоплнение фоновых процессов и в буквальном смысле посмотреть что происходит с приложением при переходе в бекграунд и возвращении в момент когда система его убила.

По поводу приоритета, как бы есть empty \ empty background \ service process \ visible \ foreground process, собственно только последние два обычно система не трогает (visible, это к примеру состояние активити при открытом диалоге, когда она видима но не переднем плане), по поводу попадания процесса в бекграунд лучше остановиться на уровне service, а все остально считать одним, поскольку девайсы бывают разные с разными ограничениями, на которые может влиять куча факторов и я сомневаюсь, что вас устроит поведение когда ваш процесс один девайс будет прибивать раньше другого просто потому что процесс с большим приоритетом на смерть в этом девайсе вообще права на жизнь не имеет.
Изображение

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: Сохранения View во фрагменте при повороте экрана

Сообщение Fry » 07 апр 2015, 15:58

Код: Выделить всё

Просто надо быть готовым к тому, что активность будет пересоздаваться (отключать все зависимости в onStart/onStop). 
Я тут вас не очень понял. Почему именно в onStart/onStop? У нас же onCreate и onDestory вызывается только один раз, вроде при задании android:configChanges.

И еще вопрос. Как у нас тогда нужно настраивать фрагменты при таком подходе? Получается setRetainInstance(true) теряем смысл?

И смену портретного/альбомного вида во фрагментах, получается, нужно делать вручную (ну тогда, когда это нужно)?
В итоге могу сказать что нет проблем с сохранением активности.
Черт, что-то я склоняюсь к этому все больше :)
Arbeit macht Fry

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Сохранения View во фрагменте при повороте экрана

Сообщение Mikhail_dev » 07 апр 2015, 16:24

Я тут вас не очень понял. Почему именно в onStart/onStop? У нас же onCreate и onDestory вызывается только один раз, вроде при задании android:configChanges.
А потому что нефиг держат слушатели прочую лабуду в режиме, когда приложение свёрнуто. Для чего юзеру, который свернул приложение необходимо к примеру получать какие-то данные в UI, когда он их не видит?
И еще вопрос. Как у нас тогда нужно настраивать фрагменты при таком подходе? Получается setRetainInstance(true) теряем смысл?
Не совсем. Активность может быть выгружена, а сам фрагмент, как объект, останется в памяти.
И смену портретного/альбомного вида во фрагментах, получается, нужно делать вручную (ну тогда, когда это нужно)?
Фрагмент вставляется в контейнер. На сколько я понимаю, для фрагментов поворот экрана неприменим.
Черт, что-то я склоняюсь к этому все больше :)
Забавный вы человек. Скачайте приложение к примеру pinterest (да и вообще посмотрите рейтинг и отзывы), о котором я узнал из книги по дизайну, как об одном из очень успешных UI и UX.
Вот его манифест
[syntax=xml]
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="com.pinterest" platformBuildVersionCode="21" platformBuildVersionName="5.0.1-1624448">
<uses-feature android:glEsVersion="0x20000" android:required="true"/>
<supports-screens android:smallScreens="false"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.sec.android.provider.badge.permission.READ"/>
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.READ_PROFILE"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name=".permission.C2D_MESSAGE"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
<permission android:name=".permission.C2D_MESSAGE" android:protectionLevel="signature"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<application android:allowBackup="false" android:hardwareAccelerated="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:name="com.pinterest.base.Application" android:supportsRtl="false" android:theme="@style/Theme.Pinterest">
<activity android:label="@string/app_name" android:name="com.pinterest.activity.PinterestActivity" android:noHistory="true" android:theme="@android:style/Theme.Light.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:label="" android:name="com.pinterest.activity.pin.PinActivity" android:theme="@style/Theme.Pinterest.White" android:windowSoftInputMode="stateHidden|adjustResize"/>
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:label="" android:name="com.pinterest.activity.task.activity.MainActivity" android:theme="@style/Theme.Pinterest.Home" android:windowSoftInputMode="adjustPan"/>
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:name="com.pinterest.activity.nux.NUXActivity" android:theme="@style/Theme.Pinterest.NUX"/>
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:label="" android:name="com.pinterest.activity.user.UserSetImageActivity" android:theme="@style/Theme.Pinterest.DialogActivity" android:windowSoftInputMode="stateHidden|adjustResize"/>
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:label="" android:name="com.pinterest.activity.unauth.UnauthWallActivity" android:windowSoftInputMode="stateHidden|adjustPan"/>
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:label="" android:name="com.pinterest.activity.signin.TwitterAuthActivity"/>
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:label="" android:name="com.pinterest.activity.signin.RakutenAuthActivity"/>
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:label="" android:launchMode="singleTop" android:name="com.pinterest.activity.sendapin.SendPinActivity" android:theme="@style/Theme.Pinterest.SlideActivity" android:windowSoftInputMode="stateHidden|adjustPan"/>
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:label="" android:name="com.pinterest.activity.create.CreateActivity" android:theme="@style/Theme.Pinterest.DialogActivity" android:windowSoftInputMode="stateHidden|adjustResize"/>
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:label="" android:name="com.pinterest.activity.create.RepinActivity" android:theme="@style/Theme.Pinterest.DialogActivity" android:windowSoftInputMode="stateHidden|adjustResize"/>
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:label="" android:name="com.pinterest.activity.create.PinEditActivity" android:theme="@style/Theme.Pinterest.DialogActivity" android:windowSoftInputMode="stateHidden|adjustResize"/>
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:label="@string/create_pin" android:launchMode="singleTop" android:name="com.pinterest.activity.create.PinItActivity" android:theme="@style/Theme.Pinterest.DialogActivity" android:windowSoftInputMode="stateHidden|adjustResize">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
<data android:mimeType="image/*"/>
</intent-filter>
<intent-filter>
<action android:name="com.pinterest.action.PIN_IT"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:label="" android:name="com.pinterest.activity.web.WebViewActivity" android:windowSoftInputMode="stateHidden|adjustResize"/>
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:label="@string/app_name" android:name="com.pinterest.activity.webhook.WebhookActivity" android:theme="@style/Theme.Pinterest.DialogActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:host="*.pinterest.com" android:scheme="http"/>
<data android:host="*.pinterest.com" android:scheme="https"/>
<data android:host="pinterest.com" android:scheme="http"/>
<data android:host="pinterest.com" android:scheme="https"/>
<data android:host="*.pinterdev.com"/>
<data android:scheme="pinterest"/>
<data android:scheme="pinit"/>
<data android:scheme="pinterest://http"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="pinterest"/>
</intent-filter>
</activity>
<service android:name="com.pinterest.GCMIntentService"/>
<service android:name="com.pinterest.service.PinterestWorkerService"/>
<service android:name="com.pinterest.service.NotificationService"/>
<receiver android:name="com.pinterest.receiver.GeofenceReceiver"/>
<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
<action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
<category android:name="com.pinterest"/>
</intent-filter>
</receiver>
<activity android:label="@string/app_name" android:name="com.facebook.LoginActivity" android:theme="@style/Theme.Pinterest.Translucent"/>
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
<receiver android:name="com.pinterest.appwidget.PWidgetProvider">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/pwidget_info"/>
</receiver>
<service android:exported="false" android:name="com.pinterest.appwidget.PWidgetService" android:permission="android.permission.BIND_REMOTEVIEWS"/>
<activity android:launchMode="singleTask" android:name="com.pinterest.appwidget.SwitcherActivity" android:theme="@style/Theme.Pinterest.White"/>
<activity android:exported="true" android:name="com.pinterest.sdk.PinterestOauthActivity" android:theme="@style/Theme.Pinterest.White"/>
<receiver android:name="com.pinterest.receiver.DeviceStartReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
<receiver android:name="com.pinterest.receiver.SignupNotificationReceiver"/>
<receiver android:name="com.pinterest.receiver.GlobalDataUpdateReceiver"/>
<meta-data android:name="com.crashlytics.ApiKey" android:value="05a6e8f0efd5cab488c1871e5dd7e03ab597d9ae"/>
<meta-data android:name="com.pinterest.mapbox.ApiKey" android:value="sk.eyJ1IjoicGludGVyZXN0IiwiYSI6ImNRLXhJOHMifQ.FCS6VzbiUVLenbkIf6MPRg"/>
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyDybBm_hqwipeuJdUDfpMjYdPxGG3jJjAA"/>
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
</application>
</manifest>

[/syntax]

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: Сохранения View во фрагменте при повороте экрана

Сообщение Fry » 07 апр 2015, 16:44

А потому что нефиг держат слушатели прочую лабуду в режиме, когда приложение свёрнуто. Для чего юзеру, который свернул приложение необходимо к примеру получать какие-то данные в UI, когда он их не видит?
Ну вот, к примеру, я использую Robospice для организации Rest-клиента. А в нем нужно spiceManager стартовать и стопать в onStart/onStop соответственно.
[syntax=java] @Override
public void onStart() {
super.onStart();
spiceManager.start();

}
[/syntax]
и

[syntax=java] @Override
public void onStop() {
if (spiceManager.isStarted()) {
spiceManager.shouldStop();
}
super.onStop();
}
[/syntax]

И не всегда это правильно переносить во фрагмент.
Фрагмент вставляется в контейнер. На сколько я понимаю, для фрагментов поворот экрана неприменим.
Ну если вам это надо, вы можете внутри фрагмента узнать ориентацию экрана и динамически поменять его вьюху.
Забавный вы человек.
Есть такое ;)
Скачайте приложение к примеру pinterest (да и вообще посмотрите рейтинг и отзывы), о котором я узнал из книги по дизайну, как об одном из очень успешных UI и UX.
А из какой книги, если не секрет? Я просто как раз сейчас читаю по ui-паттернам, http://www.amazon.com/Android-Design-Pa ... 128&sr=8-1 Вот и интересно.
Arbeit macht Fry

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: Сохранения View во фрагменте при повороте экрана

Сообщение Fry » 07 апр 2015, 17:01

Сейчас экспериментировал с android:configChanges на темах Holo есть такой эффект, чтобы ActionBar по-разному маcштабируется с ним и без него при повороте. C остальными View элементами, похоже та же ситуация.

Без него
https://yadi.sk/i/t2Oe1HzRfpjQQ

С ним
https://yadi.sk/i/G9abL3pWfpjTm


Какие-то решения есть, чтобы AB правильно масштабировался? :)
Arbeit macht Fry

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Сохранения View во фрагменте при повороте экрана

Сообщение Mikhail_dev » 07 апр 2015, 17:46

А из какой книги, если не секрет?
https://drive.google.com/file/d/0B58AYq ... sp=sharing
Ну вот, к примеру, я использую Robospice для организации Rest-клиента. А в нем нужно spiceManager стартовать и стопать в onStart/onStop соответственно.
И я об этом говорю, что надо юзать onStart и onStop
Ну если вам это надо, вы можете внутри фрагмента узнать ориентацию экрана и динамически поменять его вьюху.
а сам он не справится?
Какие-то решения есть, чтобы AB правильно масштабировался? :)
Я не знаю, но можете попробовать вообще уйти от AB. Сейчас гугл выпустил новую тулзу как альтернативу - Toolbar. Правда я не знаю, бекпортирован он или нет.

Ответить