我有:
ViewPager
带FragmentPagerAdapter
on的A (或aFragmentStatePagerAdapter
并不能真正解决我的问题)。TextView
需要设置不同的;AsyncTask
,查询我的数据库,并检索内容被设定成TextViews。所以我的代码是:
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()
)是在发布异步任务结果之前创建的,则该项目将保持空白(即可见的片段,但是由于我从未调用过而具有空的文本视图),getInstance(non-null stuff)
这对于片段0 &&片段1会发生。
如果片段是在我的异步任务结束后创建的(片段2结束,因为getItem()
仅当您通过刷卡到达该片段时才调用该片段),则第一个也是唯一的调用会getItem()
产生getInstance(non-null stuff)
,这是可以的。
如何将内容重新加载到那些已经存在的片段中,或者强制适配器调用getItem()
和更新其视图?
将此添加到您的适配器:
@Override
public int getItemPosition(Object object){
return PagerAdapter.POSITION_NONE;
}
呼叫getItem
时,这会使适配器再次呼叫notifyDataSetChanged();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句