如何在Android上重置viewpager内容?

时间:2012-12-04 15:22:22

标签: android android-viewpager

请告诉我如何在android上重置ViewPager的内容。 我试图调用adapter.notifyDataSetChanged()但是当我滚动视图时,适配器不会调用getItem(position)。它总是返回旧的子视图。

更新:这是我的片段视图。当我重置viewPager数据时,它使用了加载的Fragment视图。它只是从onCreateView而不是Constructor开始。

public class ResultView extends Fragment {
//Declare properties

     //Constructor 
public ResultView(Province province, Calendar calendar) {
    Log.d("xskt", "ResultView constructor");
    this.province = province;
    this.calendar = (Calendar) calendar.clone();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Log.d("xskt", "ResultView onCreateView");
    View view = inflater.inflate(R.layout.resultview, null);

    //do some thing

    return view;
}

感谢。

4 个答案:

答案 0 :(得分:30)

我已更改为使用FragmentStatePagerAdapter而不是FragmentPagerAdapter,问题已解决。希望这会有所帮助。

答案 1 :(得分:1)

我认为在另一个片段中重新加载片段的最佳解决方案是:

@Override
public void onPause() {
    super.onResume();
    List<Fragment> fragments = getFragmentManager().getFragments();
    if (fragments != null) {
        FragmentTransaction fragmentTransaction  = getFragmentManager().beginTransaction();
        for (Fragment fragment : fragments) {
            if (fragment instanceof Fragment) {
                fragmentTransaction.remove(fragment);
            }
        }
        fragmentTransaction.commitAllowingStateLoss();
    }
}

答案 2 :(得分:0)

一种方法是使用观察者模式。您呈现的数据可能位于sqlite DB中(或存储在内存中)。您可以在片段中设置一个侦听器,以便在更改数据时对片段进行必要的更新。

答案 3 :(得分:0)

如果您执行以下操作,它会起作用:

  • 使 viewPager 无效以使缓存无效
  • 调用 notifyDataSetChanged() 告诉适配器发生了变化,它必须刷新 Fragments
  • 覆盖 FragmentStatePagerAdapter 中的 getItemPosition 以刷新所有 Fragment

在您的活动中或您想要刷新数据的任何地方:

viewPager.invalidate();
fragmentStatePageAdapter.notifyDataSetChanged();

在你的 FragmentStatePageAdapter 中:

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