我已阅读https://stackoverflow.com/a/16793871/2442638并将建议实施到我的代码中,但它只会重新创建当前片段,而不是所有片段。
这是我的寻呼机适配器。
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public Fragment getItem(int position) {
Fragment frag = new ScreenSlidePagerFragment();
Bundle args = new Bundle();
args.putInt(ARG_PAGE_POSITION, position);
args.putInt(ARG_WEEK_NUMBER, mWeekNum);
frag.setArguments(args);
return frag;
}
@Override
public int getCount() {
return NUM_PAGES;
}
public CharSequence getPageTitle(int position) {
return null;
}
}
我想从菜单中重新创建片段。
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// The menu is being inflated elsewhere
}
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
// This is where I want to recreate all the fragments in the ViewPager. It definitely runs as I have logged it happening.
switch (id) {
case R.id.action_switch_to_weekA:
mPagerAdapter.notifyDataSetChanged();
break;
case R.id.action_switch_to_weekB:
mPagerAdapter.notifyDataSetChanged();
break;
}
return super.onOptionsItemSelected(item);
}
我解决这个问题的唯一方法就是在页面更改侦听器中调用mPagerAdapter.notifyDataSetChanged
,但这显然是一个坏主意,因为我只想在按下菜单按钮时重新创建它们,并且它可以实现非常糟糕的经历。
编辑:实际发生的是因为当加载当前页面时加载了下一页/前一页,这些页面不会刷新,而是其他页面。那么如何重新创建以前加载的片段?