2012-10-15 2 views
1

가능한 중복 : 조각 setRetainInstance하지 작업 (안드로이드 지원 LIB)


Android fragments setRetainInstance(true) not works (Android support library)

나는 간단한 테스트 프로젝트를 썼다,하지만 난 항상 라이프 사이클에 savedInstanceState = null을받을 이유가 이해하지 못할 onCreate, onCreateView 및 onActivityCreated 메소드입니다. 나는 화면 방향을 바꾸고 로그를 보지만 상태는 저장되지 않는다. 제 실수는 어디 있는지 말해주십시오. 감사합니다. . 조각 클래스의 코드는 다음과 같습니다

public class TestFragment extends Fragment { 

private String state = "1"; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    if (savedInstanceState != null) { 
     //never works 
     state = savedInstanceState.getString("state"); 
    } 
    //always prints 1 
    Toast.makeText(getActivity(), state, Toast.LENGTH_SHORT).show(); 
    return inflater.inflate(R.layout.fragment_layout, container, false); 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString("state", "2"); 
    Log.e("", "saved 2"); 
} 

}

편집

내가 다시 어떤 결과가 없다 (((I가 인 btn1를 사용하여 2로 상태를 변경 setRetainInstance를 사용하려고, 하지만 오리엔테이션을 바꾼 후에는 btn2를 누를 때 1을 봅니다. 도와주세요. (

공용 클래스 TestFragment extends Fragment {

@Override 
public void onCreate(Bundle savedInstanceState) { 
    setRetainInstance(true); 
    super.onCreate(savedInstanceState); 
} 

private String state = "1"; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_layout, container, false); 

    //button for changing state 
    ((Button)view.findViewById(R.id.button1)).setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
      state = "2"; 
     } 
    }); 

    //button for showing state 
    ((Button)view.findViewById(R.id.button2)).setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
      Toast.makeText(getActivity(), state, Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    return view; 
} 

}

답변

0

나는 같은 문제를 보았다. 하지만 setRetainInstance (true) 메서드 덕분에 다른 방법으로 상태 state를 저장할 수 있습니다. 모든 클래스 데이터는 자동으로 저장됩니다.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    setRetainInstance(true); 
    super.onCreate(savedInstanceState); 
} 

EDIT 당신이 당신의 활동을 선언 할 때 이러한 PARAMS을 추가 할 수

시도 :

<activity 
     android:name="MyActivity" 
     android:configChanges="orientation|keyboardHidden|screenSize" /> 
+0

이 답변에 대한 감사를! 하지만 나는 다시 상태를 저장할 수 없습니다 (나는 게시물을 편집했습니다, 당신은 시간이 있다면 그것을 보시기 바랍니다) – j2esu

+0

고마워요 많은 사람 ...이 라인을 추가하여 android : configChanges = "orientation | keyboardHidden | screenSize"그것은 나를 위해 작동합니다 charm like :) –

+0

글쎄, 매니 페스트 변경으로 인해 액티비티 자체가 설정 변경을 처리해야한다. 즉, 시스템의 화면 재구성/조정이 불가능해진다. 예를 들어 세로 또는 가로에 대한 다른 레이아웃은 전환되지 않습니다. 또한,이 경우 setRetainInstance는 재 작성되지 않으므로 필요하지 않습니다. – Ixx

관련 문제