2014-11-14 3 views
0

FragmentTransactions 및 FragmentManager의 근본을 이해하는 데 도움이 필요합니다. IM은 NPE는 I가 활동을 다시 할 때마다 구성 변경 (화면 회전) 후에 발생하고, 스택 트레이스는 행에서 NPE를 인쇄 샘플 출력이FragmentManager getFragments null null

11-14 10:17:42.806: D/MainActivity(1825): Any pending : false 
11-14 10:17:42.806: D/MainActivity(1825): Size : 3 

같다

List<Fragment> fragments = getSupportFragmentManager().getFragments(); 
    boolean pending = getSupportFragmentManager().executePendingTransactions(); 
    Log.d(LOG_TAG, "Any pending : " + Boolean.toString(pending)); 
    Log.d(LOG_TAG, "Size : " + Integer.toString(fragments.size())); 
    for(Fragment fragment : fragments){ 
     if(fragment != null & fragment.isVisible()){ 
      Log.d(LOG_TAG, "Fragment Tag : " + fragment.getTag()); 
     } 
    } 

호출하도록 Fragment가 null이기 때문에 아래에 있습니다.

if(fragment != null & fragment.isVisible()){ 

여기 내 혼란이 있습니다. 활동을 재현하기 전에 매니저에 두 개의 단편이 있습니다. 나는 세 번째 단편을 붙인 다음 그것을 제거하고 다시 두 단편이어야한다고 말합니다. 그러나 관리자는 목록에 3 개의 조각이 있다고 말합니다. 왜 이런거야? 나는 제거 된 조각이 onDestroy()를 통과하는 것을 볼 수있다. 관리자가 조각에 대한 참조를 null로 유지하고 있습니까?

+0

당신이 목록에서 널 (null) 항목이 이유를 알고 있습니까? 나는 FragmentTransaction.remove()를 호출하면 프래그먼트에 대한 참조가 제거된다는 인상을 받았다. – Clocker

+0

죄송합니다, 알 수 없습니다 :/ – WarrenFaith

+0

충분합니다. 귀하의 답변 주셔서 감사합니다! – Clocker

답변

3

list.size()도 역시 null입니다.

그래서이

ArrayList<String> entries = new ArrayList<String>(); 
entries.add(null); 
Log.d("HomeFragment", "Entries " + entries.size()); 

인쇄이 :

HomeFragment D Entries 1