我有:
ViewPager
开启FragmentPagerAdapter
(或FragmentStatePagerAdapter
,并不能解决我的问题。)TextView
; AsyncTask
。所以我的代码是:
public class StatsPagerAdapter extends FragmentPagerAdapter {
static final int FRAGMENT_COUNT = 5;
private Parameters[] sectionData;
public StatsPagerAdapter(FragmentManager manager) {
super(manager);
this.sectionData = new Parameters[FRAGMENT_COUNT];
}
@Override
public Fragment getItem(int position) {
return StatsSectionFragment.getInstance(this.sectionData[position]);
}
@Override
public int getCount() {
return FRAGMENT_COUNT;
}
public void setSectionData(int position, Parameters sectionData) {
this.sectionData[position] = sectionData;
notifyDataSetChanged();
}
}
所以我将sectionData[position]
传递给我的通用子片段的getInstance()
方法。该数据应区分加载到ViewPager
的片段的每个实例。
首先,我将传递一个空引用,但随后在我的异步类中传递:
@Override
protected void onProgressUpdate(Parameters... sectionValues) {
super.onProgressUpdate(sectionValues);
mPagerAdapter.setSectionData(sectionId, sectionValues[0]);
}
这应该调用上面的setSectionData()
,更新sectionData[position]
并生成对notifiyDataSetChanged()
的调用。我希望这样做会使适配器再次检索所有项目,从而再次调用getItem()
,并加载新的片段。
可悲的是,它没有。所以现在:
如果在我的异步任务结果发布之前创建了片段(即getItem()
),那么该项将保持为空(即可见片段,但由于我从未调用{{1 }}。
片段0&&amp ;;片段1。
如果在我的异步任务结束后创建了片段(片段2到结束,因为只有当你通过滑动到达那个片段时才调用getInstance(non-null stuff)
),那么第一次也是唯一一次调用{{1产生一个getItem()
,没关系。
如何将内容重新加载到已存在的片段中,或强制适配器调用getItem()
并更新其视图?
答案 0 :(得分:1)
将此添加到您的适配器:
@Override
public int getItemPosition(Object object){
return PagerAdapter.POSITION_NONE;
}
当您拨打getItem
notifyDataSetChanged();