这是我的代码: class MyDishActualBaseFragment扩展了Fragment
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Bundle data = getArguments();
categoryID = data.getInt("categoryID", 0);
}
@Override
public View onCreateView(final LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v = inflater.inflate(R.layout.update_actual_dish_layout_adapter,
container, false);
if (categoryID == 0) {
Toast.makeText(mContext, "Page1:", 3000)
.show();
} if (categoryID == 1) {
Toast.makeText(mContext, "Page2:", 3000)
.show();
}
return v;
}
这里是MyDishActualFragment类扩展FragmentPagerAdapter:
@Override
public Fragment getItem(int pos) {
// TODO Auto-generated method stub
MyDishActualBaseFragment myFragment = new MyDishActualBaseFragment(
mContext,listDishEntity);
Bundle data = new Bundle();
data.putInt("categoryID", pos);
myFragment.setArguments(data);
return myFragment;
}
我的问题是Toast仅显示一次,(“page1”和“page2”仅在运行此代码时显示一次)当我更改第1页时 - > 2,Toast不显示。那么问题是什么? 任何人都帮助我,非常感谢。
答案 0 :(得分:0)
这是因为ViewPager在每次滑动时都没有重新创建片段..它只创建一次片段并保留在内存中,并在它移动后重新创建一次offScreenpageLimit()
...每次滑动时重新创建片段,你必须设置
mViewPager.setOffscreenPageLimit(0);
但是如果你在viewpager中有这么多页面(至少超过10个),不建议使用这种方法。
答案 1 :(得分:0)
viewPager.setOffScreenPageLimit(int)告诉视图寻呼机您根本不想重新创建片段。
见
public void setOffscreenPageLimit(int limit)
设置应保留在页面两侧的页数 处于空闲状态的视图层次结构中的当前页面。页面超出此范围 在需要时,将从适配器重新创建限制。
用那个说,你在onCreate()中提供一个toast,如果viewPager默认保持当前片段,一个在前面,一个在当前片段之前,你将不会再次调用onCreate方法,除非你使用FragmentStatePagerAdapter
,每次都会破坏屏幕页面,但是你需要管理片段的状态,这对于活动中更大的片段来说更有用。
此外,我只会使用我的适配器来烘烤用户,例如
@Override
public Fragment getItem(int pos) {
// TODO Auto-generated method stub
MyDishActualBaseFragment myFragment = new MyDishActualBaseFragment(
mContext,listDishEntity);
Bundle data = new Bundle();
data.putInt("categoryID", pos);
myFragment.setArguments(data);
if (pos == 0) {
Toast.makeText(mContext, "Page1:", 3000)
.show();
} if (pos == 1) {
Toast.makeText(mContext, "Page2:", 3000)
.show();
}
return myFragment;
}
注意:这假定您的适配器实际上具有上下文。