백 스택 A, B, C에 다음 조각이 있습니다. 그런 다음 조각 D 를 추가하고 싶지만 백 스택 에는 A, B, C, D 대신 A와 D 를 넣고 싶습니다 . 내가와 B와 C를 제거하려고 할 때 문제 의는 여전히 다시 누른 상태에서 빈 화면을 만들어 기존의 하나입니다. 이것을 처리 할 방법이 있습니까?transaction.remove()
backStackEntryCount
사용 popBackStack()
하면 조각 A로 이동 한 다음 D가 나오므로 이상한 애니메이션 효과가 나타납니다.
편집 :이 질문은 백 스택에서 여러 조각의 순서를 제어하기 때문에 질문이 표시된대로 중복되지 않습니다.
백 스택에 추가 할 때 특정 상태에있을 때 백 스택을 표시 할 이름을 포함 할 수 있습니다. FragmentManager # popBackStack (string, int); 에 대한 문서를 기반으로합니다 . :
관리자의 조각 백 스택에서 마지막 조각 전환을 팝합니다. 팝업 할 항목이 없으면 false가 반환됩니다. 이 함수는 비동기식입니다. 요청을 팝하기 위해 대기열에 넣지 만 애플리케이션이 이벤트 루프로 돌아올 때까지 작업이 수행되지 않습니다.
매개 변수
name String : null이 아닌 경우 검색 할 이전 백 상태의 이름입니다. 발견되면 해당 상태까지의 모든 상태가 표시됩니다. POP_BACK_STACK_INCLUSIVE 플래그는 명명 된 상태 자체가 팝되는지 여부를 제어하는 데 사용할 수 있습니다. null이면 최상위 상태 만 표시됩니다.
flags int : 0 또는 POP_BACK_STACK_INCLUSIVE.
따라서이 경우 :
조각 A를 컨테이너와 루트 백 스택에 추가합니다. 터질 때 참조 할 수 있도록 이름을 지정하십시오.
조각 A :
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, FragmentA, "FragmentA")
.addToBackStack("first")
.commit();
컨테이너에 조각 B를 추가합니다 (교체 또는 추가, 중요하지 않음). 원하는 경우 "null"또는 다른 이름으로 백 스택에 추가합니다. "first"와 달라야합니다.
조각 B :
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, FragmentB, "FragmentB")
.addToBackStack(null)
.commit();
조각 B와 같이 조각 C를 추가하거나 대체합니다.
조각 C :
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, FragmentC, "FragmentC")
.addToBackStack(null)
.commit();
Fragment B 및 C에서와 같이 Fragment D를 추가하거나 교체합니다.
단편 D :
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, FragmentD, "FragmentD")
.addToBackStack(null)
.commit();
그런 다음 onBackPressed()
먼저 "FragmentD"가 스택에 있는지 확인합니다. 만약 그렇다면, 루트 (이 경우는 "first")까지 다시 팝하십시오. 그렇지 않은 경우 평소처럼 눌러 진 뒷면을 처리하십시오.
@Override
public void onBackPressed() {
FragmentManager fm = getFragmentManager();
if (fm.findFragmentByTag("FragmentD") != null) {
fm.popBackStack("first", 0); // Pops everything up to "first"
} else {
super.onBackPressed(); // Pops backstack like normal or leaves App if at base.
}
}
사용자가 Fragment A, B 또는 C에서 뒤로 버튼을 누를 때 "뒤로"이동하도록 허용해야합니다. 그런 다음 마지막으로 Fragment D에 들어가면 A로 돌아갑니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다