2013-09-25 2 views
1

Мой фрагмент иногда не восстанавливается должным образом. Это происходит, когда приложение больше не работает в фоновом кэшированном процессе, а затем снова открывается. Когда это происходит, все, что написано в onActivityCreated, не происходит, однако мой System.out.println(); вызывается. Так что я в конечном итоге мои предметы больше не доступны. Как мне это исправить?Фрагмент андроида не восстанавливается должным образом

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onActivityCreated(savedInstanceState); 
    System.out.println("onActivityCreated"); 

    relative1 = (RelativeLayout)getActivity().findViewById(R.id.r1); 
    relative2 = (RelativeLayout)getActivity().findViewById(R.id.r2); 
    relative3 = (RelativeLayout)getActivity().findViewById(R.id.r3); 
    relative4 = (RelativeLayout)getActivity().findViewById(R.id.r4); 

    relative1.setOnClickListener(this); 
    relative2.setOnClickListener(this); 
    relative3.setOnClickListener(this); 
    relative4.setOnClickListener(this); 

} 
+0

его трудно сказать, что происходит, не видя больше кода фрагмента. Любопытно, почему вы получаете свои взгляды из методов onActivityCreated vs onViewCreated или onCreateView? –

ответ

0

При отправке приложения в фоновый режим, а затем передний план, если есть проблема памяти или «Не заставляй Acitivities» галочка, это будет происходить. Ваша активность и фрагмент будут созданы снова. В вашей ситуации, если вы держитесь в течение длительного времени на фоне, это, вероятно, будет воссоздано. Когда это произойдет, Activity сохранит знак открытых фрагментов и снова откроет их. Если вы не контролируете, и этот фрагмент откроется в Activity onCreate, а также Activity откроется с его знаком. Вы можете исправить это, если вы контролируете, что ваш фрагмент открыт или нет флагом. Если он уже создан, вы не должны открывать второй.

Смежные вопросы