2012-09-06 3 views
3

ListFragment를 사용합니다.ListFragment setRetainInstance (true); 작동하지 않습니다.

setRetainInstance (true); 작동하지 않습니다, 나도 몰라 왜

savedInstanceState == null이

내 소스

public class Fragment_Left extends ListFragment { 

     @Override 
     public void onAttach(Activity activity) { 
      super.onAttach(activity); 
      Log.d(LOG_TAG, "Fragment1 onAttach"); 
     } 

     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      Log.d(LOG_TAG, "Fragment1 onCreate"); 
     } 

     @Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 

      setRetainInstance(true); 

     } 

     @Override 
     public void onListItemClick(ListView l, View v, int position, long id) { 
      getListAdapter().getItem(position); 

     } 



     public void onSaveInstanceState(Bundle state) { 
       super.onSaveInstanceState(state); 
       Log.i(LOG_TAG, "onSaveInstanceState()"); 


      } 


} 

public class Fragment_Left extends ListFragment { 
     private ArrayList<Menu_item> menu_list; ..... 

    @Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 

      setRetainInstance(true); 
menu_list = new ArrayList<Menu_item>();...... 

하지만 화면 menu_list가 null 설정, 아니면 내가 뭔가 잘못을 한 후 ?

+1

"작동하지 않음"은 증상에 대한 완전히 쓸모없는 설명입니다. "savedInstanceState == null"- saveInstanceState (true)와는 아무런 관련이 없습니다. – CommonsWare

+0

setRetainInstance (true)를 사용할 때; onActivityCreated (Bundle savedInstanceState) - savedInstanceState - not null .. 아니면 내가 틀렸어? –

+1

죄송합니다, 첫 번째 의견에 오타가있었습니다. 'savedInstanceState'는'setRetainInstance (true)'에 엄격하게 묶여 있지 않습니다. 'setRetainInstance (true)'는 실제'Fragment' 객체가 설정 변경에 걸쳐 유지된다는 것을 의미하므로 데이터 멤버는 그대로 유지됩니다. – CommonsWare

답변

4

어떻게 조각을 배열에 저장합니까?

"조각을 배열에 저장"하면 "구성 변경시 조각에 사용되는 배열 유지"를 의미한다고 가정합니다. 그렇다면 :

옵션 # 1 : 조각의 데이터 멤버에 넣고 해당 조각에 setRetainInstance(true)을 호출하십시오.

옵션 2 : 배열 Bundle 지원하는 데이터 타입 인 경우, Bundle의 데이터를 넣어 onSaveInstanceState()을 무시하고, 구성 변경 후에 생성 된 새로운 단편 인스턴스에서 다른 방법에서 해당 데이터를 검색 (예 : onCreateView()).

옵션 3 : 배열이 실제로 앱의 데이터 모델을 나타내는 경우 데이터베이스 및 파일과 같이 이전 및 새 프래그먼트 인스턴스가 액세스 할 수있는 중앙 영구적 인 지점에 배열을 유지합니다.

+0

http://stackoverflow.com/a/12302769/1568164 첫 번째 버전을 사용해 보았습니다. –

관련 문제