1

СЦЕНАРИЙ ТОКФрагмент изменения на вращение с навигацией ящик

В моем приложении у меня возникли навигационный ящик с фрагментами. Все работает отлично в портретном режиме.

ПРОБЛЕМА

Пусть в режиме портретной я выбираю второй элемент из панели навигации. Он загружается отлично, но когда я поворачиваю свой телефон в альбомный режим, первый фрагмент из меню навигации загружается вместо второго.

Я знаю, что я должен сохранить экземпляр для фрагмента, но я не знаю, как это сделать, и я должен сделать это в основной деятельности или фрагмент сам

ответ

2

Вы должны сделать это в вашей Fragment.

Просто следуйте этим ссылкам:

Android - save/restore fragment state

Или возможно:

Once for all, how to correctly save instance state of Fragments in back stack?

Кроме того, упомянем о onRestoreInstanceState, Fragment «s не имеет, что method.So, вы должен использовать onActivityCreated, который получает bundle с сохраненным состоянием экземпляра (или null).

Взгляните на документы:

http://developer.android.com/reference/android/app/Fragment.html#onActivityCreated(android.os.Bundle)

+0

Я использовал setRetainState уже в onActivityCreated. Что еще требуется? –

+0

Проверьте эту ссылку: http: //stackoverflow.com/questions/11182180/understanding-fragments-setretaininstanceboolean – Mohsen

+1

Спасибо, что указали на ссылку. Я получил свой код, работающий с определенной модификацией. Я проходил жестко закодированный int, чтобы отобразить метод фрагмента в основной активности. Таким образом, в состоянии сохранения экземпляра я только что сохранил позицию, а затем загрузил фрагмент этой позиции в onCreate –

0

Я ответил на такой же вопрос в этой теме:

How to keep the same fragment when activity restarts due to orientation change in a Navigation Drawer Activity

Я попытался объяснить, почему решение я даю Works , поэтому, если вы заинтересованы проверить это.

Чтобы решить эту проблему, я просто поставить код, который раздувает начальный фрагмент внутри, если (в OnCreate ящика деятельности навигации):

super.onCreate(savedInstanceState); 
if(savedInstanceState==null){ 
    FragmentManager fM = getSupportFragmentManager(); 
    fM.beginTransaction().replace(R.id.NavDrawContent,new home_fragment()).commit(); 
} 

так, чтобы она не разбухает первый фрагмент когда мы меняем ориентацию, а во втором