1

방금 ​​Android 플랫폼 용으로 개발하기 시작했습니다. 현재 작업하고있는 응용 프로그램의 경우 응용 프로그램 속성을 관리하기 위해 다음 .xml 파일과 함께 활동을 사용하고 있습니다. 사용자가 PreferenceMenuFragment에서 요소를 선택 안드로이드 안의 지속성 (null 번들)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 

    <fragment class="fr.berard.preference.ManagePreferenceActivity$PreferenceMenuFragment" 
      android:id="@+id/titles" android:layout_weight="20" 
      android:layout_width="0px" android:layout_height="match_parent" /> 

    <FrameLayout android:id="@+id/details" android:layout_weight="80" 
      android:layout_width="0px" android:layout_height="match_parent" 
      android:background="?android:attr/detailsElementBackground" /> 

</LinearLayout> 

은 세부 조각은 다음 행으로로드됩니다

FragmentManager fragmentManager = getFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
PreferenceFragment pdf = new CustomPreferenceFragment(); 
fragmentTransaction.replace(R.id.details, pdf); 
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);  
fragmentTransaction.commit(); 

활동은 지속성에서 온다, 문제가 잘 작동합니다. PreferenceFragment를 확장하는 클래스에서 onSaveInstanceState()를 구현했습니다.

public final String WRONG_CARD_KEY = "wrong_card_value"; 

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

    if (savedInstanceState != null) { 
     if (savedInstanceState.containsKey(WRONG_CARD_KEY)) { 
      Toast.makeText(this.getActivity(), " loaded", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

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

    savedInstanceState.putString(WRONG_CARD_KEY, "test"); 
    Toast.makeText(this.getActivity()," saved", Toast.LENGTH_SHORT).show(); 
} 

홈 버튼을 누르면 onSaveInstanceState() 메서드가 호출됩니다. 그러나 PreferenceFragment로 돌아 가면 onActivityCreated()가 호출되지만 번들은 여전히 ​​null입니다. onSaveInstanceState에 넣은 정보가 저장되지 않은 이유를 설명 할 수 없습니다. 어쩌면 내가 단편을 구현하는 동안 실수를 저질렀을 수도 있습니다. 어쩌면 내가 주요 활동에서 시작하는 방식에서 오는 것일 수도 있습니다. ListFragment와 동일한 문제가 있지만 답변이없는 일부 게시물을 발견했습니다.

도움 주셔서 감사합니다.

답변

0

조각/활동이 나중에 파괴되는 경우 (예 : OS 메모리 회수) OS가 시스템에서 복원해야 할 경우 onSaveInstanceState 호출이 선제 호출이라고 생각합니다. 조각이 파괴되고 다시 만들어지지 않으므로 저장된 상태에서 자신을 복원 할 필요가 없습니다.

+0

내 문제는 PreferenceFragment에서 값을 수동으로 변경 (예 : 환경 설정에 요약 추가) 할 때 환경 설정으로 돌아 가면 요약이 사라집니다. – Jef2007

+0

PreferenceFragment를 사용하지 않았지만 onDestroyView에서 인스턴스 데이터에 상태를 저장 (예 : 최신 상태로 유지) 한 다음 onCreateView에서 저장된 상태의 프래그먼트를 복원 할 수 있습니까? – PJL

관련 문제