Хто-небудь може допомогти мені дізнатися про те, Bundle savedInstanceState
в чому onCreate(Bundle savedInstanceState)
я новачок в Android. Я намагаюся зрозуміти це від developer.android.com. Але я не в змозі зрозуміти. Хтось може це спростити?
Хто-небудь може допомогти мені дізнатися про те, Bundle savedInstanceState
в чому onCreate(Bundle savedInstanceState)
я новачок в Android. Я намагаюся зрозуміти це від developer.android.com. Але я не в змозі зрозуміти. Хтось може це спростити?
Відповіді:
Якщо ви зберігаєте стан програми в комплекті (як правило, непостійні, динамічні дані в onSaveInstanceState
), його можна повернути назад, onCreate
якщо активність потрібно відтворити (наприклад, зміна орієнтації), щоб ви не втратили цього попереднього інформація. Якщо дані не були надані, savedInstanceState
це недійсне значення.
... вам слід використовувати метод onPause () для запису будь-яких постійних даних (наприклад, правки користувачів) у сховище. Крім того, метод onSaveInstanceState (Bundle) викликається перед тим, як розмістити активність у такому фоновому стані, що дозволяє зберегти будь-який динамічний стан екземпляра вашої активності в даний пакет, щоб згодом бути отриманим у onCreate (Bundle), якщо активність потребує відновлення. Див. Розділ Процес життєвого циклу для отримання додаткової інформації про те, як життєвий цикл процесу пов'язаний з заходами, які він проводить. Зауважте, що важливо зберігати стійкі дані в onPause () замість onSaveInstanceState (Bundle), оскільки останні не є частиною зворотного виклику життєвого циклу, тому він не буде викликаний у будь-якій ситуації, як описано в його документації.
onCreate(Bundle savedInstanceState)
ви отримаєте Bundle
нульове значення, коли діяльність починається вперше, і він буде використовуватись, коли зміна орієнтації на діяльність .......
http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html
Android забезпечує ще один елегантний спосіб досягти цього. Щоб досягти цього, ми повинні перекрити метод, який називається onSaveInstanceState()
. Платформа Android дозволяє користувачам зберігати будь-який стан примірника. Стан екземпляра можна зберегти в пакеті. Пакет передається як аргумент методу onSaveInstanceState.
ми можемо завантажити збережений стан екземпляра з пакету, переданого як аргумент onCreate
методу. Ми також можемо завантажити збережений стан екземпляра в onRestoreInstanceState
метод. Але я залишу це для читачів, щоб розібратися.
savedInstanceState
буде не, null
якщо onSavedInstanceState()
раніше було викликано. зміни орієнтації - лише один приклад, коли це може статися.
Bundle
аргумент onCreate(Bundle)
буде не- null
тоді і тільки тоді , коли Activity
було це onSaveInstanceState
метод раніше називався. Це трапляється під час зміни орієнтації ... а також, коли активність повертається після вбивства ОС і коли ви запускаєте будь-яку іншу зміну конфігурації, що цікавить ваш пристрій.
Як відповів Dhruv Gairola, ви можете зберегти стан програми, використовуючи Bundle savedInstanceState. Я намагаюся навести дуже простий приклад, що нові учні, як я, можуть легко зрозуміти.
Припустимо, у вас є простий фрагмент з TextView та кнопкою. Кожен раз, коли ви натискаєте кнопку, текст змінюється. Тепер змініть орієнтацію вашого пристрою / емулятора і помітите, що ви втратили дані (означає змінені дані після натискання на вас) і фрагмент починається як перший раз. Використовуючи Bundle savedInstanceState, ми можемо позбутися цього. Якщо ви заглянете в життєвий цикл фрагмента. Фрагмент Lifecylce ви отримаєте, що метод "onSaveInstanceState" викликається, коли фрагмент збирається знищити.
Таким чином, ми можемо зберегти стан означає змінене значення тексту в цей пакет, як цей
int counter = 0;
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("value",counter);
}
Після того як ви зробите орієнтацію, метод "onCreate" буде називатися правильно? тому ми можемо просто зробити це
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState == null){
//it is the first time the fragment is being called
counter = 0;
}else{
//not the first time so we will check SavedInstanceState bundle
counter = savedInstanceState.getInt("value",0); //here zero is the default value
}
}
Тепер ви не втратите свою цінність після орієнтації. Змінене значення завжди відображатиметься.
функція onCreate (Пакет збереженийInstanceState) в Android:
1) Коли перший виклик активності або запущений, а потім метод onCreate (Bundle saveInstanceState) відповідає за створення активності.
2) Коли коли-небудь орієнтація (тобто від горизонтальної до вертикальної або вертикальної до горизонтальної) діяльності змінюється або коли діяльність примусово припиняється будь-якою операційною системою, тоді saveInstanceState, тобто об'єкт класу Bundle, збереже стан активності.
3) Після зміни Орієнтації, тоді onCreate (пакет збереженихInstanceState) зателефонує та відтворить активність та завантажить усі дані з збереженогоInstanceState.
4) В основному клас Bundle використовується для зберігання даних про діяльність, коли в додатку виникає вищезазначений стан.
5) onCreate () не потрібен додаткам. Але причина, яку він використовує в додатку, полягає в тому, що саме цей метод є найкращим місцем для розміщення коду ініціалізації.
6) Ви також можете помістити код ініціалізації в onStart () або onResume (), і коли програма завантажиться спочатку, вона буде працювати так само, як і в onCreate ().
onCreate(Bundle)
називається, коли діяльність вперше запускається. Ви можете використовувати його для одноразової ініціалізації, наприклад створення інтерфейсу користувача. onCreate()
приймає один параметр, який є нульовим, або деяку інформацію про стан, попередньо збережену onSaveInstanceState
.
onCreate (Пакет збереженихInstanceState) викликає, і збереженеInstanceState буде недійсним, якщо ваша активність і вона була припинена у сценарії (візуальний вигляд), описаному вище. Потім ваш додаток може захопити (виловити) дані з збереженогоInstanceState і відновити свою активність