簡體   English   中英

使用FragmentPagerAdapter具有3個片段的Viewpager

[英]Viewpager with 3 fragments using FragmentPagerAdapter

我已經使用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());

}
}

日志:

// when the activity is created.
I/FragmentAbout instance: instance
I/EditSkills instance: instance


// When I click on page 2
I/FragActivity instance: instance

從3向片段2向片段1向后移動,但這次沒有為任何片段調用newInstance()

I/readBundle oncreateview: readBundle oncreateview

請說明以上過程。

Viewpager根據OffscreenPageLimit參數預加載鄰居片段。 默認情況下,它設置為1( DEFAULT_OFFSCREEN_PAGES = 1)

您使用了FragmentPagerAdapter ,這意味着如果片段視圖遠超出屏幕限制,則可能會破壞片段視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM