2014-07-22 3 views
0

findFragmentById를 사용하여 내 조각을 가져 오려고했지만 그 자리에 null이 생길 때마다 findFragmentByTag를 사용하고 태그를 추가하여 트랜잭션을 추가했지만 그 작업도 동일합니다.findFragmentById가 항상 null을 반환하는 이유는 무엇입니까?

다음 코드는 (단순성을 위하여) 수정 된 빈 시작 템플릿

공용 클래스 MainActivity가 활동 {

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(null); 
    setContentView(R.layout.activity_main); 

    FragmentManager fragmentManager = getFragmentManager(); 

    if (savedInstanceState == null) { 
     fragmentManager.beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()).commit(); 
    } 

    PlaceholderFragment placeholderFragment = (PlaceholderFragment) fragmentManager 
      .findFragmentById(R.id.container); 

    if (placeholderFragment == null) { 
     Log.i("TAG", "placeholderFragment is null"); 
    } else { 
     Log.i("TAG", "placeholderFragment is not null"); 
    } 
} 

public static class PlaceholderFragment extends Fragment { 

    public PlaceholderFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main, container, 
       false); 
     return rootView; 
    } 
} 

}

내가 다음을 시도 (가) add(R.id.container, new PlaceholderFragment(), "TAG")으로 추가 교체 시도 연장 findFragmentByTag("TAG")으로 액세스 할 수도 있습니다.

의도 한대로 코드를 작동 시키려면 어떻게해야합니까?

답변

3

나는이 문제가 Fragment을 추가 한 직후에 발견하려고하고 있다고 생각합니다. 그 작은 시간에 Fragment은 아마도 아직 추가되지 않았을 것입니다.

조각을 추가하는 동안 이미 조각을 가지고 있습니다.

findFragmentById() 기능은 일반적으로 다른 기능에서 이미 잠시 추가 한 후에 Fragments에 액세스하는 기능입니다. 여기

이 문제 덕분이었다 실제로 예를 들어

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(null); 
    setContentView(R.layout.activity_main); 

    FragmentManager fragmentManager = getFragmentManager(); 
    PlaceholderFragment placeholderFragment = new PlaceholderFragment(); 

    if (savedInstanceState == null) { 
     fragmentManager.beginTransaction() 
       .add(R.id.container, placeholderFragment).commit(); 
    } 
} 

public void anotherFunc() { 

    PlaceholderFragment placeholderFragment = (PlaceholderFragment) fragmentManager 
      .findFragmentById(R.id.container); 
} 
+0

그래입니다 – Kaylee

관련 문제