내 프로젝트에서 호환성 패키지 v4를 사용하고 있으며보기에서 제거 된 후에 Fragment
을 유지하는 데 문제가 있습니다. 내 Activity
2 조각을 표시 ... 왼쪽에있는 메뉴 프레임, 오른쪽에있는 콘텐츠 창. 메뉴 프레임에는 표시 할 수있는 3 가지 메뉴 (조각)가 있습니다.이전에 표시된 조각을 어떻게 복원합니까?
이 나는 메뉴 조각을 대체하고있어 방법은 다음과 같습니다
public void showMenuFragment(Fragment fragment, String tag) {
showFragment(R.id.menu_frame, fragment, tag, false);
setLastMenuPushed(tag);
}
protected void showFragment(int resId, Fragment fragment, String tag, boolean addToBackStack) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
if (fragmentManager.findFragmentByTag(tag) != null && fragment.isAdded()) {
transaction.remove(fragment);
}
transaction.replace(resId, fragment, tag).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).setBreadCrumbShortTitle(tag);
if (addToBackStack) {
transaction.addToBackStack(tag);
}
transaction.commit();
}
Fragment
의가 표시되기 전에 데이터가로드 될, 그래서 로딩 스피너를 보여줄 필요 메뉴. 처음로드 된 후에는 Activity
이 끝나지 않으면 다시로드하지 않아도됩니다. 내가 showMenuFragment(...)
를 호출 할 때
나는 FragmentManager.findFragmentByTag(String tag)
를 사용하여 Fragment
전달하려고하지만 항상 null
, 그래서 나는 다른 메뉴를 표시 할 새로운 Fragment
마다해야한다.
제 질문은, 다른 메뉴로 교체 한 후 어떻게합니까? 장치를 회전 할 때 내 Activity
클래스의 인스턴스가 파괴되어 이러한 참조를 잃어 버리기 때문에 Fragment
에 대한 수동 참조는 유지하지 않는 것이 좋습니다.
편집 : 훨씬 간단한 용어로 말하면, FragmentManager
은 이전의 Fragment
을 백 스택에 추가하지 않고도 계속 추적하기를 원합니다. 뒤로 버튼을 누르고 이전 메뉴를 보려고하지 않습니다.
이 문제를 되돌아 보면, 더 좋은 해결책은 활동에서 단편을 "분리"하고 클래스의 하드 참조를 유지하는 것입니다. –
detach vs hide의 이점은 무엇입니까? 보기를 파괴하는 것이 진정한 변화를 가져 왔습니까? 전체 조각을 다시로드하지 않고 복원하는 좋은 방법이 있습니까? – ben
@ben Detach는보다 친환경적인 접근 방식 인 화면에서 뷰 계층 구조를 제거합니다. 대부분의 뷰는 조각에서 제거 될 때 인스턴스 상태를 저장하는 작업을 잘 수행하므로 다시 연결할 때 큰 문제는 없습니다. –