2017-01-15 2 views
0

Я написал программу, используя ViewPager и 3 фрагмента. Моя проблема:Viewpager с 3 фрагментами с использованием FragmentPagerAdapter

Когда создается действие, сначала вызывается 2 фрагмента. При переходе от фрагмента 1 к 2, когда фрагмент 2 щелкнут или прокручивается, вызывается метод newInstance() фрагмента 3. И, когда я перехожу назад от фрагмента 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 

Пожалуйста, объясните, вышеописанный процесс.

+0

'getItem' всегда возвращает новый экземпляр в ваш код. Следующие ближайшие фрагменты загружаются в память при прокрутке. Вы можете сохранить список объектов Фрагмента, как это сделал бы адаптер массива –

ответ

0

Viewpager предварительно загружает соседние фрагменты в зависимости от OffscreenPageLimit параметр. По умолчанию установлено значение 1 (DEFAULT_OFFSCREEN_PAGES = 1)

Вы используемые FragmentPagerAdapter, что означает, что вид фрагмента могут быть уничтожены, если они находятся дальше, то закадровый предел.

Смежные вопросы