2017-04-06 20 views
0

항상 Log.d에서 널 포인터 예외가 발생합니다. 나는 fragmendt가 왜 위에 생성되는 동안 왜 null인지 이해하지 못한다.Android : getSupporteFragment가 null을 반환합니다.

name = "dashboard"; 
fragment = new FragmentDashboard(); 

final FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction(); 
transaction.replace(R.id.frame_container, fragment, name); 
transaction.addToBackStack(null); 
transaction.commit(); 

FragmentDashboard fragmendt = (FragmentDashboard) activity.getSupportFragmentManager().findFragmentByTag("dashboard"); 
Log.d("DEBEUG", "test: " + fragmendt.toString()); 

답변

1

FragmentTransaction#commit()의 설명을 읽습니다 : "일정이이 트랜잭션의 커밋합니다.". 이것은 조각이 미래의 어떤 시점에 추가된다는 것을 의미하지만, 그것이 언제 될지는 정의되지 않았습니다. 이후에 조각을 직접 찾음으로써 트랜잭션이 아직 발생하지 않았습니다.

즉시 조각을 만들고 추가하려면 동 기적으로 작동하는 FragmentTransaction#commitNow() 메서드가 있습니다. 당신이 설명에 모두 addToBackstack(...)commitNow() 찾고 사용할 수 있습니다 마십시오 :이 방법으로 최선을 다하고

거래는 다른 비동기 커밋 된 트랜잭션에 대한 다른 기대 주문 보증을 휴식 것이 그렇게 같이 FragmentManager의 다시 스택에 추가 할 수 없습니다 . 이전에 addToBackStack (String)를 사용하여 백 스택에 추가하도록 트랜잭션을 요청한 경우이 메서드는 IllegalStateException을 throw합니다.

+0

나는 그 생각조차하지 않았다! 감사 ! –