Android 조각 onRestoreInstanceState


120

암 내가 뭔가를 없거나 않는 Fragments는하지 onRestoreInstanceState()방법을? 그렇지 않다면 비슷한 것을 얻으려면 어떻게해야합니까?

답변:


200

조각에는 onRestoreInstanceState메서드 가 없습니다 .

onActivityCreated저장된 인스턴스 상태 (또는 null)가있는 번들을받는 에서 동일한 결과를 얻을 수 있습니다 .

여기 에서 소스 코드를 확인 하십시오 .


90
일관된 디자인이 아니죠?
Ehtesh Choudhury

4
이것은 또한 조각을 재개하는 것을 처리하지 않습니까? 구성 변경에는 좋지만 조각에서 활동으로 이동 한 다음 조각으로 돌아 가면 어떻게 될까요?
speedynomads

1
프래그먼트는 시작하려면 액티비티에 속해야하므로 프래그먼트에 저장하면 상위 액티비티에 저장됩니다. 따라서 해당 조각 (활동에 속하는)을 떠나 조각으로 돌아 가면 모든 값이 부모 활동에서 복원됩니다
Shaun

3
onActivityCreated ()는 조각의 상태를 복원하는 유일한 방법이 아닙니다. onCreate (), onCreateView () 또는 onActivityCreated () 중에 복원 할 수 있습니다. developer.android.com/guide/components/fragments.html
shaby

1
@EhteshChoudhury Android 앱 개발에서 "일관된 디자인"은 없습니다. 모든 것이 엉망이고 모든 것이 "사용되지 않음"입니다.
Karanveer Singh 2018

43

나는 당신이 대답을 받아 들였다는 것을 알고 있습니다. 그러나 당신은 fragments대한 공식 문서를 읽어야합니다. ( "Fragment Lifecycle 처리하기"단락) :

활동의 프로세스가 종료되고 활동이 다시 생성 될 때 조각 상태를 복원해야하는 경우 번들을 사용하여 조각의 상태를 유지할 수 있습니다. 조각의 onSaveInstanceState () 콜백 중에 상태를 저장하고 onCreate (), onCreateView () 또는 onActivityCreated () 중에 복원 할 수 있습니다.

그래서, 당신은 그 정장을 사용할 수 있습니다 당신을 최고로 onCreate(), onCreateView()또는onActivityCreated()


29

Fragments 가이드의 ListFragment 예제에서 다음을 찾을 수 있습니다.

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("curChoice", mCurCheckPosition);
}

다음과 같이 사용할 수 있습니다.

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
        // Restore last state for checked position.
        mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
    }
}

onActivityCreated() 조각이 스택에서 다시 반환 된 후에 호출됩니다.


13

onViewStateRestoredFragment의 상당 onRestoreInstanceState의이 Activity. 그러나 이후 onActivityCreated(Bundle)와 이전에 호출 onStart()됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.