Може ли някой да ми помогне да знам за Bundle savedInstanceState
в onCreate(Bundle savedInstanceState)
Аз съм начинаещ в Android. Опитвам се да го разбера от developer.android.com. Но не мога да разбера. Може ли някой да го опрости?
Какво има наCreate(Bundle savedInstanceState)
Отговори (6)
Ако запишете състоянието на приложението в пакет (обикновено непостоянни, динамични данни в onSaveInstanceState
), то може да бъде предадено обратно на onCreate
, ако дейността трябва да бъде пресъздадена (напр. промяна на ориентацията), така че да не загубите тази предварителна информация. Ако не са предоставени данни, savedInstanceState
е нула.
... трябва да използвате метода onPause(), за да запишете всички постоянни данни (като потребителски редакции) в хранилището. В допълнение, методът onSaveInstanceState(Bundle) се извиква преди поставяне на активността в такова фоново състояние, което ви позволява да запазите всяко динамично състояние на инстанция във вашата дейност в дадения пакет, за да бъде получен по-късно в onCreate(Bundle), ако дейността трябва да се създаде отново. Вижте раздела Жизнен цикъл на процеса за повече информация относно това как жизненият цикъл на процес е свързан с дейностите, които хоства. Обърнете внимание, че е важно да запазите постоянни данни в onPause() вместо onSaveInstanceState(Bundle), тъй като последният не е част от обратните извиквания на жизнения цикъл, така че няма да бъде извикан във всяка ситуация, както е описано в неговата документация.
onCreate(Bundle savedInstanceState)
ще получите Bundle
null, когато дейността започне за първи път и тя ще се използва, когато ориентацията на дейността се промени .......
http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html
Android предоставя друг елегантен начин за постигане на това. За да постигнем това, трябва да заменим метод, наречен onSaveInstanceState()
. Платформата Android позволява на потребителите да запазват всяко състояние на инстанция. Състоянието на екземпляра може да бъде запазено в пакета. Пакетът се предава като аргумент на метода onSaveInstanceState.
можем да заредим запазеното състояние на екземпляр от пакета, предаден като аргумент на метода onCreate
. Можем също да заредим запазеното състояние на екземпляр в метода onRestoreInstanceState
. Но ще оставя това на читателите да разберат.
savedInstanceState
ще бъде не-null
, ако onSavedInstanceState()
е бил извикан преди това. промените в ориентацията са само един пример, в който това може да се случи.
- person Alex Lockwood; 30.05.2012
Bundle
към onCreate(Bundle)
ще бъде не-null
ако и само ако Activity
е извикал преди това метода onSaveInstanceState
. Това се случва по време на промени в ориентацията... и също се случва, когато активността се възобнови, след като е била унищожена от операционната система, и когато задействате друга промяна на конфигурацията, която представлява интерес на вашето устройство.
- person Alex Lockwood; 30.03.2014
Както Dhruv Gairola отговори, можете да запазите състоянието на приложението, като използвате Bundle savedInstanceState. Опитвам се да дам много прост пример, който новите учащи като мен могат лесно да разберат.
Да предположим, че имате прост фрагмент с TextView и бутон. Всеки път, когато щракнете върху бутона, текстът се променя. Сега променете ориентацията на вашето устройство/емулатор и забележете, че сте загубили данните (означава променените данни след щракване, които сте получили) и фрагментът започва отново като първия път. С помощта на Bundle savedInstanceState можем да се отървем от това. Ако надникнете в жизнения цикъл на фрагмента.Fragment 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(Bundle savedInstanceState) Функция в Android:
Когато дадено действие първо се извика или стартира, тогава методът onCreate(Bundle savedInstanceState) отговаря за създаването на дейността.
Когато някога ориентацията (т.е. от хоризонтална към вертикална или вертикална към хоризонтална) на дейността бъде променена или когато дадена дейност бъде прекратена принудително от която и да е операционна система, тогава savedInstanceState, т.е. обектът на Bundle Class ще запази състоянието на дадена дейност.
След промяна на ориентацията тогава onCreate(Bundle savedInstanceState) ще извика и пресъздаде дейността и ще зареди всички данни от savedInstanceState.
По принцип класът Bundle се използва за съхраняване на данните за дейността, когато горното условие възникне в приложението.
onCreate() не се изисква за приложения. Но причината да се използва в приложението е, че този метод е най-доброто място за поставяне на код за инициализация.
Можете също така да поставите кода си за инициализация в onStart() или onResume() и когато приложението ви се зареди първо, то ще работи по същия начин като в onCreate().
onCreate(Bundle)
се извиква при първото стартиране на дейността. Можете да го използвате за извършване на еднократна инициализация, като например създаване на потребителски интерфейс. onCreate()
приема един параметър, който е или нулев, или някаква информация за състояние, запазена преди това от onSaveInstanceState
.
onCreate(Bundle savedInstanceState) се извиква и savedInstanceState няма да бъде нула, ако вашата активност и тя е прекратена в сценарий (визуален изглед), описан по-горе. След това вашето приложение може да вземе (улови) данните от savedInstanceState и да генерира повторно вашата активност