2012-08-06 4 views
3

다른 답변을 제안했지만 로그를 볼 때 POSITION_NONE과 함께 getItemPosition이 반환 된 후 위치 0이 getItem에 호출되지 않았습니다. 나는 또한 getItemPosition이 리턴 될 때 destoryItem을 오버라이드하려고 시도했다.FragmentPager가 뷰를 업데이트하지 않음

공용 클래스 ProvidersActivityPagerAdapter는 FragmentPagerAdapter의 지원 라이브러리 버전 아무것도에서 항목을 파괴하지 않는 것 같습니다 FragmentPagerAdapter {

private ArrayList<String> fragments; 

public ProvidersActivityPagerAdapter(FragmentManager fm) { 
    super(fm); 
    fragments=new ArrayList<String>(); 
    if(provider.isInitialized()){ 
    fragments.add(BaseDetailsFragment.class.getName()); 
    }else{ 
    fragments.add(BaseAuthFragment.class.getName()); 
    } 
    this.fm=fm; 
} 

@Override 
public int getCount(){ 
    return fragments.size(); 
} 


@Override 
public int getItemPosition(Object object) { 
    AppUtils.logI("Get Item Position: "+POSITION_NONE+" "+object.getClass().getName()); 
    return POSITION_NONE; 
} 

@Override 
public Fragment getItem(int position) { 
    AppUtils.logI("Get Fragment for: "+position); 
    String f=fragments.get(position); 
    if(f.equals(BaseDetailsFragment.class.getName())){ 
    return provider.getDetailFragment(); 
    } 
    if(f.equals(BaseAuthFragment.class.getName())){ 
    return provider.getAuthFragment(); 
    } 
    if(f.equals(BaseSelectorFragment.class.getName())){ 
    return provider.getCurrentSelector(); 
    } 
    return new Fragment(); 
} 

private void addItem(int loc,String fa,String tag){ 
    this.fragments.add(loc,fa); 
    AppUtils.logI(fragments.toString()); 
    notifyDataSetChanged(); //only creates the new fragment but not updating the old ones. 
    mViewPager.setCurrentItem(loc); 
} 

답변

7

을 확장합니다. 따라서 해결책은 페이지 어댑터를 생성 할 때 fragment 관리자를 저장하고 destoryItem() 함수를 재정의하는 것입니다. 이 버전은 지원 라이브러리의 향후 버전과 호환되지 않을 수 있습니다.

@Override 
public void destroyItem(ViewGroup container,int position,Object object){ 
    super.destroyItem(container, position, object); 
    FragmentTransaction bt = fm.beginTransaction(); 
    bt.remove((Fragment)object); 
    bt.commit(); 
} 
+0

이것은 어디에도 기록되어 있지 않습니까? 저는이 문제를 잠시 동안 해결하려고 노력해 왔으며 2012 년에 게시 된이 답을 가로 질러 우연히 발견되었습니다. 나는 2015 년에도 이것이 여전히 내 문제가 될 수는 없다고 생각했지만 충분히 성공적이었습니다. 어떻게 해결되지 않았습니까? – NoChinDeluxe

관련 문제