2013-03-14 3 views
1

내 앱이 API 8 이상을 대상으로하고 ActionbarSherlock을 사용합니다. ActivitySherlockFragmentActivity까지 확장됩니다.getFragmentManager()가 null을 반환합니다.

public class MyFragmentAdapter extends FragmentPagerAdapter { 

    public Fragment getItem(int position) { 
     ... 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     super.destroyItem(container, position, object); 

     FragmentManager manager = ((ListFragment) object).getSherlockActivity().getSupportFragmentManager(); 
     FragmentTransaction trans = manager.beginTransaction(); 
     trans.remove((Fragment) object); 
     trans.commit(); 
    } 
} 

destroyItemFragmentPagerAdapter의 페이지를 제거하는 데 사용됩니다 다음과 같이 viewpager에 대한 나의 단편 어댑터입니다. 이것은 처음에는 잘 작동합니다. 어쩌면 처음 두 번 페이지가 삭제되었을 수도 있습니다. 그러나 페이지 삭제가 계속되는 시점에서 manager은 null을 반환하고 manager.beginTransaction() 행에서 앱이 다운됩니다.

나는이 이유를 알아낼 수 없습니다 ...

+1

이것은 super.destroyItem (....)으로 인한 것일 수 있습니다. 관리자 호출 전에 호출됩니다. 그것은 ((ListFragment) (object))이 호출 전에 파괴되는 속성 중 일부를 가질 수 있습니다. 본질적으로 경주 상태는 간헐적 인 성격을 설명합니다. 코드 뒤에 super.destroy ...로 이동해보십시오. –

+0

추후에도 충돌 문제가 발생하면 스택 추적을 추가하십시오. – Warpzit

답변

1

나는이 문제를 알아 냈어. destroyItem에 전달 된 ListFragmentFragmentManager == null입니다. 목록에있는 Nullered WeakReference 항목을 제대로 삭제하지 않았기 때문입니다.

0

마지막으로 며칠 전 제 오류를 발견 할 수있었습니다. 이 경우 바로 확인

그냥 마지막으로

datosGuardados = savedInstanceState; 

및 savedInstanceState

의 데이터를 저장하는 글로벌 변수

Bundle datosGuardados; 

으로 새로운 번들 변수를 만들 :

해결책은 간단하다 getFragmentManager를 사용하기 전에 null.

if (datosGuardados != null) infoF = (InformacionFragment) getFragmentManager().findFragmentById(R.id.posicionamiento_layout); 
관련 문제