IT박스

백 스택에서 조각 제거

itboxs 2020. 12. 14. 07:58
반응형

백 스택에서 조각 제거


태블릿을 세로로 들고있을 때 활동에 3 개의 조각이 있습니다. 하지만 가로 모드에서는이 조각 중 2 개만 있습니다. 내가 가진 문제는 세로에서 가로로 이동할 때 활동이 세 번째 조각을 만드는 것입니다. 이 조각을 만들 수 없으므로 오류가 발생합니다.

이 조각이 백 스택에 있기 때문에 생성되고 있음을 알아 냈습니다.

onDestroy 메서드에서 조각을 제거하려고했습니다.

FragmentTransaction f = fragmentManager.beginTransaction();
f.remove(mf);
f.commit();

그러나 onSaveInstanceState 후에이 기능을 사용할 수 없다는 오류가 발생합니다.

이 조각을 백 스택에서 꺼내는 올바른 방법은 무엇입니까?

최신 정보

문제가있는 조각이이 라이브러리의 mapFragment라고 추가해야합니다.

https://github.com/petedoyle/android-support-v4-googlemaps

내가 사용하는 방식은 이렇게

mf = MapFragment.newInstance(1, true);

ft = fragmentManager.beginTransaction();
ft.replace(R.id.mapContainer, mf);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack("map");
ft.commit();

pop 메서드를 FragmentTransaction사용하여 백 스택에서 백 상태에 추가 하고 제거 FragmentManager합니다.

FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove(myFrag);
trans.commit();
manager.popBackStack();

원하는 백 스택 인덱스로 이동하는 코드를 만들었는데 내 목적에 잘 맞았습니다.

즉. Fragment1, Fragment2 및 Fragment3이 있습니다. Fragment3에서 Fragment1로 이동하고 싶습니다.

Fragment1로 점프하는 Fragment3에서 onBackPressed라는 메서드를 만들었습니다.

Fragment3 :

public void onBackPressed() {
    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.popBackStack(fragmentManager.getBackStackEntryAt(fragmentManager.getBackStackEntryCount()-2).getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}

활동에서 현재 프래그먼트가 Fragment3인지 알아야하므로 super를 호출하는 대신 내 프래그먼트의 onBackPressed를 호출합니다.

FragmentActivity :

@Override
public void onBackPressed() {
    Fragment f = getSupportFragmentManager().findFragmentById(R.id.my_fragment_container);
    if (f instanceof Fragment3)
    {
        ((Fragment3)f).onBackPressed();
    } else {
        super.onBackPressed();
    }
}

제거하려는 조각이 스택의 맨 위에 있지 않으면 어떻게됩니까?

그런 다음이 기능을 사용할 수 있습니다.

popBackStack(int arg0, int arg1);

popBackStack(String arg0, int arg1);

참고 URL : https://stackoverflow.com/questions/9033019/removing-a-fragment-from-the-back-stack

반응형