2016-07-14 4 views
2

R.layout.myFragment으로 액세스되는 (미리 쓰여진) 조각이 있습니다. Fragment (미리 작성된 코드에서도)를 ViewPager 내부의 FragmentPagerAdapter에 전달해야하므로 getFragmentManager().findFragmentById(R.layout.myFragment)으로 전달하려고했으나 R.id.something 형태로 예상 한대로 null을 반환했습니다.
Google지도 조각을 구현하는 것과 관련하여 여기에서 일부 답변을 찾았습니다. 단편을 R.layout.myFragment 형태로 사용하고 부모/컨테이너 조각이 없기 때문에 (내 생각에는) 내 문제에는 해당되지 않습니다. 내가 아는 한 비슷하게) FragmentTransaction을 사용합니다.
Fragment는 ViewPager의 FragmentPagerAdapter의 getItem() 오버라이드에 반환 될 것으로 예상됩니다. 조각을 가져 와서 돌려 주면 어떻게 되나요?어떻게이 조각을 반환 할 수 있습니까?

+0

코드는 어디에 있습니까? 피곤 했습니까? – Nambi

+0

도움이된다면 답변을 수락하십시오. – SoroushA

답변

0

두 가지 가능한 솔루션이 있습니다. 둘 다 필요한 모든 것을 찾기 위해 모든 조각을 반복합니다.

List<WeakReference<Fragment>> fragList = new ArrayList<WeakReference<Fragment>>(); 

@Override 
public void onAttachFragment (Fragment fragment) { 
    fragList.add(new WeakReference(fragment)); 
} 

public List<Fragment> getActiveFragments() { 
ArrayList<Fragment> ret = new ArrayList<Fragment>(); 
for(WeakReference<Fragment> ref : fragList) { 
    Fragment f = ref.get(); 
    if(f != null) { 
     if(f.isVisible()) { 
      ret.add(f); 
     } 
    } 
} 
return ret; 
} 

또 다른 해결책 as explained by Michael을 사용하는 것입니다 :

으로는 연결된 모든 조각의 목록을 작성하는 작업 클래스의 onAttachFragment 방법을 사용하고 나중에 반복 할 수 didi_X8에 의해 here 설명 라이브러리를 지원하고 getFragments 메소드를 활용하십시오.

public List<Fragment> getVisibleFragments() { 
List<Fragment> allFragments = getSupportFragmentManager().getFragments(); 
if (allFragments == null || allFragments.isEmpty()) { 
    return Collections.emptyList(); 
} 

List<Fragment> visibleFragments = new ArrayList<Fragment>(); 
for (Fragment fragment : allFragments) { 
    if (fragment.isVisible()) { 
     visibleFragments.add(fragment); 
    } 
} 
return visibleFragments; 
} 
관련 문제