다음은 시나리오입니다. 메인 레이아웃에 메인 FragmentActivity
및 replace()
조각이 있습니다. 내 프래그먼트 중 하나 (프래그먼트가 상위 프래그먼트라고 가정 해 봅시다)에 하위 프래그먼트 (프래그먼트 B는 목록 조각)가 있습니다. 목록 항목을 클릭하면 FragmentB를 다른 하위 조각 인 FragmentC (Detail Fragment)로 대체하고 Fragment B를 addToBackStack()
과 함께 다시 스택에 추가합니다. 나는이 코드로 메인 FragmentActivity
의 뒤 버튼을 클릭한다 :왜 백 스택에 조각을 추가 할 수 없습니까?
@Override
public void onBackPressed() {
// mCurrentFragment is FragmentA, parent fragment
// If the fragment exists and has some back-stack entry
if (mCurrentFragment != null && mCurrentFragment.getChildFragmentManager().getBackStackEntryCount() > 0){
// Get the fragment fragment manager - and pop the back stack
mCurrentFragment.getChildFragmentManager().popBackStack();
}
// Else, nothing in the direct fragment back stack
else{
// Let super handle the back press
super.onBackPressed();
}
}
이것은 완벽하게 작동한다.
그러나 "parent"FragmentA를 FragmentC로 바꿀 때 super.onBackPressed()
행의 뒤로 버튼을 누르면 'NullPointerException'이 발생합니다. 이것은 백 스택 입력 수가 0보다 적기 때문입니다.
다음은 내가 부모를 대체하는 코드입니다.
//This is on FragmentB(list fragment)
FragmentManager fragmentManager = getParentFragment().getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.main_content_frame, fragment).addToBackStack(null).commit();
이렇게하면이 질문이 어리 석다. 나는 누군가가 같은 실수를 바보 같은 대답을 만들 수 있습니다 바란다 :) – osrl