Сохранить состояние пользовательского представления?

У меня есть приложение, в котором пользователь нажимает на экран (в котором пользовательское представление находится на месте с холстом), и появляется растровое изображение, когда пользователь нажимает. Мое приложение работает нормально, за исключением случаев, когда я нажимаю кнопку «Домой» и покидаю активность. Это пример того, как это выглядит, когда пользователь нажимает на экран и размещает растровые изображения (до нажатия кнопки «Домой»): 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