gpt4 book ai didi

android - 动态更改 ViewPager 中的 fragment 内容

转载 作者:行者123 更新时间:2023-11-30 02:10:47 25 4
gpt4 key购买 nike

我有:

  • 带有 FragmentPagerAdapterViewPager(或 FragmentStatePagerAdapter,并不能真正解决我的问题)。
  • 固定数量的 fragment 。它们都共享相同的布局,但具有需要不同设置的 TextView
  • 一个 AsyncTask,它查询我的数据库并检索要设置到 TextView 中的内容。

所以我的代码是:

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] 传递给我的通用子 fragment 的 getInstance() 方法。该数据应区分加载到 ViewPager 中的 fragment 的每个实例。

起初我将传递一个空引用,但随后在我的异步类中:

    @Override
protected void onProgressUpdate(Parameters... sectionValues) {
super.onProgressUpdate(sectionValues);
mPagerAdapter.setSectionData(sectionId, sectionValues[0]);
}

应该调用上面的 setSectionData(),更新 sectionData[position] 并生成对 notifiyDataSetChanged() 的调用。我希望这样做会使适配器再次检索其所有项目,从而再次调用 getItem(),并加载新 fragment 。

遗憾的是它没有。所以现在:

  • 如果在我的异步任务结果发布之前创建了 fragment (即 getItem()),该项目将保持为空(即可见 fragment ,但 TextView 为空,因为我从未调用过 getInstance(non-null stuff)。这发生在 fragment 0 && fragment 1 上。

  • 如果 fragment 是在我的异步任务结束后创建的( fragment 2 结束,因为 getItem() 仅在您通过滑动到达该 fragment 时被调用),那么第一个也是唯一一个调用 getItem() 会产生一个 getInstance(non-null stuff),这没问题。

如何将内容重新加载到那些已经存在的 fragment 中,或者强制适配器调用 getItem() 并更新其 View ?

最佳答案

将此添加到您的适配器:

@Override
public int getItemPosition(Object object){
return PagerAdapter.POSITION_NONE;
}

这会使您的适配器在您调用 notifyDataSetChanged(); 时再次调用 getItem

关于android - 动态更改 ViewPager 中的 fragment 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30128634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com