1
Android fragments setRetainInstance(true) not works (Android support library)
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;
}
}
이 답변에 대한 감사를! 하지만 나는 다시 상태를 저장할 수 없습니다 (나는 게시물을 편집했습니다, 당신은 시간이 있다면 그것을 보시기 바랍니다) – j2esu
고마워요 많은 사람 ...이 라인을 추가하여 android : configChanges = "orientation | keyboardHidden | screenSize"그것은 나를 위해 작동합니다 charm like :) –
글쎄, 매니 페스트 변경으로 인해 액티비티 자체가 설정 변경을 처리해야한다. 즉, 시스템의 화면 재구성/조정이 불가능해진다. 예를 들어 세로 또는 가로에 대한 다른 레이아웃은 전환되지 않습니다. 또한,이 경우 setRetainInstance는 재 작성되지 않으므로 필요하지 않습니다. – Ixx