请告诉我如何在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;
}
感谢。
答案 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.invalidate();
fragmentStatePageAdapter.notifyDataSetChanged();
在你的 FragmentStatePageAdapter 中:
@Override
public int getItemPosition(@NotNull Object object) {
return POSITION_NONE;
}