2013-02-20 3 views
43

나는 조각 Cf를 호출하는 조각 Bf를 호출하는 활동 A를 가지고 있습니다. Cf가 호출 될 때 Bf를 백 스택에 배치하여 사용자가 다시 탐색 할 수있게합니다. 그러나 Cf에서 특정 버튼을 누르면 Bf를 백 스택에서 제거하고 싶습니다. 이것이 가능한가?백 스택에서 조각을 푸는 방법

popBackStack() 함수가 있습니다. 그러나, 나는 이것이 어떻게 작동하는지 조금 혼란스러워합니다. 이 기능을 사용해도 안전합니까? 백 스택에서 Bf 이후 다른 응용 프로그램의 활동이 삽입 될 가능성이 있습니까?

또한 백 스택에서 프래그먼트의 savedInstanceState를 변경할 수있는 방법이 있습니까?

에뮬레이터를 사용하여 백 스택에서 강력한 테스트를 수행하는 방법을 알 수 없습니다.

+0

피를 포함! 그것은 전반적인 효율성에 정말로 도움이되지 않습니다! 일반 replace()를 사용하거나 탐색 할 때마다 더 나은 제거/추가! http://stackoverflow.com/questions/5802141/is-this-the-right-way-to-clean-up-fragment-back-stack-when-leaving-a-deeply-nest/26093368#에서 내 게시물을 확인하십시오. 26093368 –

+0

@stack_ved 좋은 생각이 아닙니다. 백 스택은 좋은 점입니다. Btw 나는 너의 포스트를 볼 수 없다. 나는 그것이 downvoted라고 생각한다. : P – Sufian

답변

86

조각을 이름으로 팝핑 할 수 있습니다. 백 스택에 조각을 추가하는 동안 이름을 지정하십시오.

fragmentTransaction.addToBackStack("fragB"); 
fragmentTransaction.addToBackStack("fragC"); 

그런 다음 Fragment_C에, 이름 즉 .. fragB를 사용하여 다시 스택을 팝업 스택을 다시 사용 POP_BACK_STACK_INCLUSIVE

someButtonInC.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 

     FragmentManager fm = getActivity() 
       .getSupportFragmentManager(); 
     fm.popBackStack ("fragB", FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    } 
}); 
+9

fm.popBackStack 메서드에서도 매개 변수를 전달하지 않아도 작동합니다. fm.popBackStack(); – Kailas

+0

만약 내가 다시 버튼을 눌러 그것을 만들고 싶어? – Akshay

+0

@Akki backstack에 add를 사용하면 뒤로 탐색 항목을 누를 때 추가 된 마지막 조각이 이미 팝됩니다. 따라서 정상적인 내비게이션을 수행하기 위해 추가 단계가 필요하지 않습니다. 뒤로 버튼을 눌렀을 때 다시 정의해야하는 경우는 일반적인 한 단계 뒤로 탐색을 수행하려는 경우입니다. – ocross

관련 문제