2014-07-10 3 views
1

프래그먼트 수명주기가 백 스택의 조각 간 전환과 어떤 관련이 있는지 이해하는 데 어려움을 겪고 있습니다. 제 질문이 여러 가지 오해를 드러내는 경우 저와 함께 견뎌주십시오. 나의 조각은 아이 뷰를 가지고,조각을 전환 할 때 어떻게 자식보기의 상태를 유지할 수 있습니까?

public class SomeFragment extends Fragment { 
    private SomeCustomView customView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.some_fragment, container, false); 
     return view; 
    } 

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

     // Create the child view 
     customView = (SomeCustomView) getView().findViewById(R.id.some_fragment_child_view); 
     customView.initializeMyCustomView(); 
    } 
} 

당신이 볼 수 있듯이 :

여기 내 코드입니다. 하위보기는 맞춤보기입니다. 여기서 코드의이 단편은 다시 스택에 첨가하고 나중에 복원마다

public class SomeCustomView extends SurfaceView implements SurfaceHolder.Callback { 

    private boolean aVariableWhichMustPersistForLifetimeOfApplication; 

} 

가 가변 customView가 재현되고, 그래서 aVariableWhichMustPersistForLifetimeOfApplication 값을 느슨하게. 이것은 나를 위해 모든 종류의 문제를 만들고 있습니다.

ActivitySomeCustomView 만 표시되고 조각이없는 응용 프로그램이 시작되었습니다. 이제는 기능을 추가해야하므로 사용자 정의보기가 조각으로 바뀌므로이 문제가 발생합니다.

답변

1

나에게 맞는 답변을 찾았습니다. FragmentTransaction 클래스에는 조각을 in/out으로 전환 할 수있는 여러 가지 메소드가 있습니다. (FragmentTransaction에 대한 안드로이드 문서는 here이며 StackOverflow의 설명이 here입니다.) 내 경우

, 나는 그것의보기에 포함 된 데이터를 풀어 결코 SomeFragment을 원했다. 나중에 다음

SomeFragment fragment = new SomeFragment(); 
FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
transaction.add(R.id.activity_fragment_placeholder, fragment, "some_fragment"); 
transaction.commit(); 

과 : : 이제 R.id.activity_fragment_placeholder에 다른 조각을 부착/추가 할 수 있습니다

getFragmentManager().beginTransaction().hide(fragment).commit(); 

이 작업을 수행하려면이 코드를 사용합니다. 내가 replace()이 아닌 hide()을 사용하고 있음을 주목하십시오. 이것이 뷰를 파괴하지 않게하는 주요한 차이입니다. 조각을 다시 원하면 show()을 사용하거나 다른 조각을 추가/첨부 할 때 addToBackStack()을 사용하는 경우 사용자가 "뒤로"를 클릭하면 Android가 자동으로이 작업을 수행합니다.

1

이 문서에 도움이 될 수 있습니다 http://alexfu.github.io/blog/2013/12/09/managing-fragment-states-manually/

또한, 당신은 또한 당신의 부울 저장 된 SharedPreferences를 사용할 수 있습니다.

+0

감사합니다. SharedPrefs를 사용하기에는 실제 클래스에 너무 많은 속성이 있습니다. 내가 정말로 원했던 것은'View'가 결코 파괴되지 않는 것이었기 때문에 그렇게 할 수있는 방법을 찾았습니다. – John

관련 문제