更改页面时,不会调用android ViewPager onCreateVew()

时间:2014-08-16 14:16:08

标签: android listview android-viewpager

这是我的代码:  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不显示。那么问题是什么?  任何人都帮助我,非常感谢。

2 个答案:

答案 0 :(得分:0)

这是因为ViewPager在每次滑动时都没有重新创建片段..它只创建一次片段并保留在内存中,并在它移动后重新创建一次offScreenpageLimit() ...每次滑动时重新创建片段,你必须设置

mViewPager.setOffscreenPageLimit(0);

但是如果你在viewpager中有这么多页面(至少超过10个),不建议使用这种方法。

答案 1 :(得分:0)

viewPager.setOffScreenPageLimit(int)告诉视图寻呼机您根本不想重新创建片段。

  

public void setOffscreenPageLimit(int limit)

     

设置应保留在页面两侧的页数   处于空闲状态的视图层次结构中的当前页面。页面超出此范围   在需要时,将从适配器重新创建限制。

src:http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)

用那个说,你在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;
}

注意:这假定您的适配器实际上具有上下文。