지원 라이브러리의 조각으로 앱을 개발합니다. 나는 하나의 활동만을 사용한다. 레이아웃은 축소 도구 모음 레이아웃이있는 코디네이터 레이아웃과 탐색보기로 구성됩니다. 나는이 (가) NavigationItemSelectedListener에서 다음을 실행 탐색 항목 선택시 : 새 항목을 선택할 때 onResume이 "죽은"조각에 대해 호출되었습니다. 올바르게 복구하는 방법은 무엇입니까?
switch (item.getItemId()) {
default:
return false;
case R.id.mainmenu_start:
navi.clear();
navi.navigate(new StartFragment(), R.id.fragment_container);
return true;
// ... More menu entries
}
그래서 나는 가기 backstack (
navi.clear()
)을 삭제하고 새 것으로 표시된 조각을 교체합니다.
내가 가지고있는 문제는 다음과 같습니다. "이전"(대체 된) 조각 은 삭제/분리되지 않음. 나는 StartFragment로 이동하면
그래서, 다음 다른 단편으로 이동 한 후 다시 StartFragment을 선택 onResume
두 번 호출됩니다 : 새로 하나를 생성
번/처음 StartFragment "오래된"에, 한 번에.
이 동작을 어떻게 피할 수 있습니까? 또는은 기존 조각을 재사용하고 싶지만 두 가지 모두를 사용하면 큰 문제가 발생합니다 ...
각 조각에 고유 한 (증분) ID를 부여했습니다. 새로운 Fragment로 이동하면 onResume은 여러 개의 이전 Fragment에서 호출되지만 모든 Fragment에서는 호출되지 않습니다.
예 : 나는 항상 탐색을 위해 동일한 메뉴 항목을 선택합니다. 2 다시 시작,
- 만들기 1, 1을 다시 시작, 1
- 2 작성 이력서 :이 수는 (조각을 모두 같은 클래스 (StartFragment)이다)을 조각 ID를 나타내는 "사건"발생하는이다
- 1, 다시 시작, 3 만들기 3
- 4 작성 이력서, 2를 다시 시작, 3을 다시 시작,
4 그래서 때로는 "오래된"조각이 누락를 다시 시작하고 나중에 다시. onResume은 때로 완전히 다른 부분에서 호출되기도합니다. AS를
public void clear() {
FragmentManager fragmentManager = ((MainActivity)context).getSupportFragmentManager();
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
public void navigate(Fragment fragment, int container, HashMap<String, Pair<String, View>> sharedElements) {
this.hideKeyboard();
FragmentTransaction ft = ((MainActivity)context).getSupportFragmentManager().beginTransaction();
ft.replace(container, fragment);
ft.addToBackStack(null);
ft.commit();
((MainActivity)context).getDrawerLayout().closeDrawers();
}
먼저 생각하여이 특별한 경우 중 하나를 달성 할 수있다 : 당신이 popBackStackImmediate 대신 popBackStack를 시도? 차이가 있습니까? –
감사합니다 :) 이것은 올바른 해결책 인 것 같습니다! 어쩌면 당신은 대답으로 이것을 게시하고 싶습니다. 그래서 그것을 받아 들일 수 있습니다 – Kryptur
물론, 나는 그것을 별도의 답변으로 다시 게시 할 것입니다. –