2014-04-03 12 views
0

다음은 시나리오입니다. 메인 레이아웃에 메인 FragmentActivityreplace() 조각이 있습니다. 내 프래그먼트 중 하나 (프래그먼트가 상위 프래그먼트라고 가정 해 봅시다)에 하위 프래그먼트 (프래그먼트 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(); 

답변

0

onBackPressed() 코드는 this 대답에서였다. childFragmentManager을 사용하지 않았으므로 필요하지 않았습니다. 그 코드를 삭제하면 효과가있었습니다.

+0

이렇게하면이 질문이 어리 석다. 나는 누군가가 같은 실수를 바보 같은 대답을 만들 수 있습니다 바란다 :) – osrl