2014-06-08 7 views
0

이미 액티비티에 추가하고 커밋 한 조각에서 SupportMapFragment를 가져 오려고 할 때 가끔 NPE가 발생합니다. 예를 들어, 내 코드가 같은 경우 :FragmentTransactions null 포인터 예외

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home); 

    if (savedInstanceState == null) { 
     fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().add(R.id.content_frame, fragmentMapa).commit(); 
     fragmentManager.executePendingTransactions(); 
    } 

    ... //non-related code... 

    setMapFragment(); 
} 


setMapFragment(){ 
    mapa = ((SupportMapFragment) fragmentManager.findFragmentById(R.id.map)).getMap(); 
} 

내가 코드의 mapa 라인에 NPE를 얻을. 그게 이상한 원인이 내가 라인을 onPostExecute() asyncTask (1 또는 2 초 정도 소요) 메서드로 이동하면 제대로 작동하기 때문에 트랜잭션을 실행하는 데 몇 초가 걸릴 것이라고 생각합니다. 그래서 내가 executePendingTransactions()을 사용하고 있지만 아무것도하지 않는 것처럼 보입니다.

트랜잭션이 아직 완료되지 않은 경우이 NPE를 피하기 위해 조각을 어떻게 사용해야합니까?

답변

0

열려있는 조각에 대해 [조각 모음]을 설정해야합니다. 당신은 당신이 "yourFragmentManager"을 의미하는 "yourFragmentView"를 말했을 때

getActivity().getSupportFragmentManager(); 

당신의 조각에서 조각 관리자에 액세스 andalso

setMapFragment(){ 
    mapa = ((SupportMapFragment) yourFragmentView.findFragmentById(R.id.map)).getMap(); 
} 
+0

할 전화? 나는 그것을하려하지만 여전히 NPE를 얻고있다 : FragmentManager fm = HomeActivity.this.getSupportFragmentManager(); \t mapa = ((SupportMapFragment) fm.findFragmentById (R.id.map)). getMap(); – moictab

+0

이상한 것은 어쨌든 코드가 나중에지도를 얻는다면 완벽하게 작동한다는 것입니다. – moictab

+0

아니요, onCreateView 내부의 조각에지도 객체가 포함 된 XML을 부 풀린 뷰가 있습니다. findViewById는 내가 말한 것처럼해야합니다. –