2016-10-03 4 views
-5

У меня есть приложение, имеющее просмотр пейджера и фрагментов. В моем родительском родительском фрагменте я сделал setRetainInstance(true).Android-приложение сбой при изменении размера шрифта

Я положил свое приложение в фоновом режиме и изменил размер шрифта. Когда я снова открываю приложение, он падает.

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference 
at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:667) 

Я не могу использовать setRetainInstance(false). Поскольку мне нужно сохранить государство. Как это исправить?

+4

похоже на ошибку в WhereIsTheCode.java строке 666 – Selvin

+0

Вам нужно написать в аренду часть кода вашего менеджера фрагментов. Особенно строка, где произошла ошибка –

+0

Это сбой во внутренних файлах. Исправлено setRetainInstance (true). Если я удалю его, это не сбой –

ответ

0

Случай 1:

Использование setRetainInstance НЕ держать ваш взгляд в памяти только сохранить один экземпляр в качестве своего рода Singleton на основе тега или ID, который вы даете вашему фрагменту. Это хорошо, потому что когда Fragment переходит на задний план, ваш взгляд уничтожается и не является необходимой памятью.

Проверьте эту ссылку. Reference Link

случай 2:

Ваша ошибка не создает, когда размер шрифта имеет changed.but ваш arraylist.size становится нулевой .please проверить yourfile.java в строке 666.please проверить состояние, если ArrayList = нуль всякий раз, когда! используйте arraylist.size() в своем коде.

0

Это происходит потому, что вы получили доступ пустой массив

добавить ниже код, прежде чем вы получите доступ утра список массива

if (!nArrayList.isEmpty() ||nArrayList != null) { 
    //access your arraylist 
     } 
1

Вам просто нужно проверить, если фрагмент был присоединен или нет с помощью этого

if (isAdded()) { 
//do your stuff 
} 
Смежные вопросы