Android 使用FragmentPagerAdapter的带3个片段的Viewpager

Android 使用FragmentPagerAdapter的带3个片段的Viewpager,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我已经用ViewPager和3个片段编写了一个程序。我的问题是: 创建活动时,将调用前2个片段。从片段1转到片段2时,单击或滚动片段2时,将调用片段3的newInstance()方法。当我从片段3向后移动到片段2再到片段1时,调用了onCreateView()方法 我的代码: ViewPagerAdapter.java public class ViewPagerAdapter extends FragmentPagerAdapter { private static int NUM_ITEM

我已经用ViewPager和3个片段编写了一个程序。我的问题是:

创建活动时,将调用前2个片段。从片段1转到片段2时,单击或滚动片段2时,将调用片段3的
newInstance()
方法。当我从片段3向后移动到片段2再到片段1时,调用了
onCreateView()
方法

我的代码:

ViewPagerAdapter.java

public class ViewPagerAdapter extends FragmentPagerAdapter {

private static int NUM_ITEMS = 3;
Context context;

public ViewPagerAdapter(FragmentManager manager,Context context) {
    super(manager);
    this.context = context;
}

@Override
public int getCount() {
    return NUM_ITEMS;
}

// Returns the fragment to display for that page
@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            return Fragment_About.newInstance("About",20);
        case 1: 
            return Fragment_EditSkills.newInstance ("Skills",30);
        case 2:
            return Fragment_EditActivities.newInstance("Activities",40);

        default:
            return null;
    }
}
}
Fragment_About.java

public class Fragment_About extends Fragment {

public static Fragment_About newInstance(String name, int age) {
    Bundle bundle = new Bundle();
    bundle.putString("name", name);
    bundle.putInt("age", age);

    Fragment_About fragment = new Fragment_About();
    fragment.setArguments(bundle);

    Log.i("FragmentAbout instance","instance");
    Log.i("name",""+name);
    Log.i("age",""+age);
    return fragment;
}

private void readBundle(Bundle bundle) {
    if (bundle != null) {
        name = bundle.getString("name");
        age = bundle.getInt("age");
        Log.i("readBundle oncreateview","readBundle oncreateview");
        Log.i("name",""+name);
        Log.i("age",""+age);
    }
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
    container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_about, container, 
    false);

    txtEditAbout = (TextView) view.findViewById(R.id.textEditAbout);
    about = (TextView) view.findViewById(R.id.about);

    readBundle(getArguments());

}
}
日志:

将调用从3向后移动到片段2到片段1,但这次不会为任何片段调用
newInstance()

I/readBundle oncreateview: readBundle oncreateview

请解释上述过程。

Viewpager根据OffscreenPageLimit参数预加载相邻片段。默认情况下,它被设置为1(default\u OFFSCREEN\u PAGES=1)


您使用了FragmentPagerAdapter,这意味着如果片段视图超出屏幕限制,则可能会被销毁。

getItem
始终在代码中返回一个新实例。当您滑动时,下一个最近的片段将加载到内存中。您可以像数组适配器那样存储片段对象列表
I/readBundle oncreateview: readBundle oncreateview