Запазване на състоянието на персонализирания изглед?

Имам приложение, при което потребителят докосва екрана (в който е налице персонализиран изглед с платно) и се появява растерно изображение, където потребителят докосва. Приложението ми работи добре, освен когато натисна бутона „начало“ и напусна дейността. Това е пример за това как изглежда, когато потребителят докосне екрана и постави растерните изображения (преди да бъде натиснат началният бутон): http://i.stack.imgur.com/6BgIL.png

Когато потребителят натисне бутона „начало“ и след това се върне към приложението, то спира да работи правилно. Растерната мрежа, която е поставена на заден план, изчезва, както и всички други растерни топки, които са били нарисувани върху платното. Единствената останала топка е последната поставена топка. Не само това, но дейността замръзва и позволява на потребителя да натисне произволен бутон само след няколко секунди. Ето как изглежда екранът, след като потребителят натисне бутона „начало“ и се върне към дейността (същият екран като горната снимка): http://i.stack.imgur.com/198bP.png

Как да запазя състоянието на персонализирания изглед, така че когато дейността се стартира отново, да остане същата? (или ако не подхождам правилно към този проблем, има ли други начини да го поправя?). Ето моя код за метода на пауза и възобновяване в моя персонализиран повърхностен изглед:

public void pause(){
    isRunning = false;
    while(true){
        try {
            ourThread.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        break;
    }
    ourThread = null;
}

public void resume(){
    isRunning = true;
    ourThread = new Thread(this);
    ourThread.start();

}

Търся известно време, но не мога да намеря решение. Друг код ще бъде предоставен, ако е необходимо. Благодаря!


person Jarnuman    schedule 04.03.2012    source източник


Отговори (2)


Вижте този http://developer.android.com/reference/android/app/Activity.html

ще трябва да използвате onResume(), за да начертаете изгледа на екрана...

прочетете жизнения цикъл на активността там и разберете действителната причина зад пълния изглед да не се показва на втория екран... може да се наложи да преструктурирате малко кода на дейността си за това..

person Rahul garg    schedule 04.03.2012
comment
Как бих нарисувал отново същия изглед на екрана, без да начертая нов изглед? Искам да запазя същите топки и мрежа, които бяха на изгледа преди - person Jarnuman; 04.03.2012
comment
Част от изгледа липсва във втория екран (но не всички), означава, че трябва да имате някакъв код, работещ в методите onStart() или onResume(), ще трябва да го погледнете... onCreate() ще бъде извикан първо /един път, когато дейността започне... докато onStart() и onResume() ще бъдат извикани отново, когато потребителят натисне бутона за начало и се върне обратно към приложението... трябва да потърсите действителната причина защо част от изгледа липсва (като имате предвид жизнения цикъл на дейността), тогава можете да решите проблема си... - person Rahul garg; 05.03.2012
comment
Ще предоставя своя код за методите за възобновяване и пауза в редакция в оригиналната публикация. Изглежда не мога да открия никакви проблеми, може би бихте могли да помогнете? - person Jarnuman; 06.03.2012

трябва да запазите всички необходими данни в onPause(), като координати на топки и състояния на активност и след това да възстановите всичко в onResume().

можете да съхранявате и възстановявате всеки Java обект. прочетете повече за onRetainNonConfigurationInstance() и getLastNonConfigurationInstance() на http://developer.android.com/guide/topics/resources/runtime-changes.html

person Gal Ben-Haim    schedule 04.03.2012
comment
Това е проблем, защото след като топката бъде поставена, нейните координати се изтриват. Веднага след като потребителят докосне екрана, за да постави друга топка, координатите се презаписват от координатите на новата топка. - person Jarnuman; 06.03.2012