getLastNonConfigurationInstance всегда возвращает ноль - PullRequest
4 голосов
/ 04 сентября 2010
HashMap myMap = (HashMap) getLastNonConfigurationInstance();

myMap всегда нулевой. getLastNonConfigurationInstance () возвращает объект. Моя карта имеет две клавиши "символ" и "имя".

public Object onRetainNonConfigurationInstance()
    {
        HashMap myMap = new HashMap();
        myMap.put("symbol", this.symbol);
        final Object data = myMap;
        return data;
    }

Ответы [ 4 ]

13 голосов
/ 19 декабря 2010

Я столкнулся с той же проблемой. Похоже, что вызов getLastNonConfigurationInstance () в любом другом месте, кроме onCreate (), возвращает null. Я переместил оператор в метод onCreate () и вуаля ... он вернул то, что ожидал вернуть.

5 голосов
/ 04 сентября 2010

Если getLastNonConfigurationInstance() возвращает ненулевой объект, то (HashMap) getLastNonConfigurationInstance() либо возвратит тот же объект (если этот объект HashMap), либо выдаст ClassCastException.

Ситуация, которую вы описываете, невозможна, если только вы не обнаружили давно скрытую ошибку в операторе приведения Java. Подсказка: у вас нет.

Убедитесь, что getLastNonConfigurationInstance() действительно возвращает ненулевой объект. Убедитесь, что myMap фактически равно нулю. Если вы используете отладчик для проверки этих значений, попробуйте вывести их на консоль. Отладчики могут иногда лгать вам или, по крайней мере, вводить в заблуждение.

0 голосов
/ 12 мая 2019

getLastNonConfigurationInstance() вернет ссылку, которая была сохранена в методе onRetainNonConfigurationInstance().

onRetainNonConfigurationInstance() метод будет вызываться между onStop и onDestroy в случае любого изменения конфигурации, здесь вы можете сохранить любую ссылку на объект.

Активность сохраняет эту ссылку до onResume вызова.

Activity.class

final void performResume(boolean followedByPause, String reason) {
    ...
    mLastNonConfigurationInstances = null;       // clearing reference
    ...
    mInstrumentation.callActivityOnResume(this); // onResume
}
0 голосов
/ 04 сентября 2010

Вы не сказали нам, в какой ситуации это происходит? onRetainNonConfigurationInstance () вызывается перед onDestroy () действия в случае изменения конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...