2014-12-08 2 views
0

У меня проблема с моим viewpager, который содержит 3 фрагмента: когда я иду налево, информация о правильном исчезает, и когда я иду вправо, информация о левом исчезает. Под «информацией» я имею в виду текстовые метки и данные из моего проекта.Почему мои фрагменты повторно инициализируются в моем представлении?

Эта проблема вызывает NullPointerExceptions.

Мой код:

public class Principal extends FragmentActivity { 

private PagerAdapter mPagerAdapter; 
private List<Fragment> fragments; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    super.setContentView(R.layout.principal); 
    DataModel.getInstance().setFragmentActivity(this); 

    // Création de la liste de Fragments que fera défiler le PagerAdapter 
    fragments = new Vector<Fragment>(); 

    // Ajout des Fragments dans la liste 
    fragments.add(Fragment.instantiate(this,PageGaucheFragment.class.getName())); 
    fragments.add(Fragment.instantiate(this,PageMilieuFragment.class.getName())); 
    fragments.add(Fragment.instantiate(this,PageDroiteFragment.class.getName())); 

    // Création de l'adapter qui s'occupera de l'affichage de la liste de Fragments 
    this.mPagerAdapter = new MyPagerAdapter(super.getSupportFragmentManager(), fragments); 

    ViewPager pager = (ViewPager) super.findViewById(R.id.viewpager); 
    // Affectation de l'adapter au ViewPager 
    pager.setAdapter(this.mPagerAdapter); 
    pager.setCurrentItem(1); 

} 
... 



public class MyPagerAdapter extends FragmentPagerAdapter { 

private final List<Fragment> fragments; 

//On fournit à l'adapter la liste des fragments à afficher 
public MyPagerAdapter(FragmentManager fm, List<Fragment> fragments) { 
    super(fm); 
    this.fragments = fragments; 
} 

@Override 
public Fragment getItem(int position) { 
    return (Fragment) this.fragments.get(position); 
} 

@Override 
public int getCount() { 
    return this.fragments.size(); 
} 

}

И мои фрагменты начинаются так:

public class PageGaucheFragment extends Fragment { 

private TextView textViewIlluminePrecedent = null; 

private View V; 

private List<TextView> listeTextViewCombinaisons = new ArrayList<>(); 

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

Я искал решение для этой проблемы, может быть, это "вложенная" фрагменты проблемы но я не знаю, что это.

Благодарим за помощь!

Извините за мой английский, я французский;)

И скажите мне, если я не писал достаточно подробностей

ответ

1

По умолчанию, ViewPager только держит 1 закадровый страницу по обе стороны от текущей страницы в памяти за раз. Это означает, что у вас в памяти не более трех страниц, и если вы находитесь в первом или последнем элементе, у вас есть только два.

Вы можете настроить это, позвонив по телефону setOffscreenPageLimit(int) на ваш ViewPager.

Однако вы должны сделать это осторожно, так как это может серьезно повлиять на память, особенно при работе с фрагментами.

Похоже, что настоящая проблема заключается в том, что ваши фрагменты не обрабатываются правильно воссозданными. Если вы сталкиваетесь с NullPointerExceptions, когда ViewPager воссоздает ваши фрагменты, вы, скорее всего, столкнетесь с ними и в других ситуациях.

Я бы потратил некоторое время на то, что вызывает эти NullPointerExceptions, и попытаться устранить эти ошибки. Обратите особое внимание на то, когда вы вызываете методы жизненного цикла фрагмента при изменении страниц ViewPager, и это должно помочь пролить свет на источник проблемы.

+0

Количество оконных страниц не обрабатывается ViewPager - это работа PagerAdapter, которую вы также должны предоставить. в его случае он снабжает FragmentPagerAdapter –

+0

@SamDozor setOffScreenPageLimit - это метод на ViewPager. – stkent

+0

Спасибо, метод setOffscreenPageLimt (int) решил мою проблему! И NullPointerExceptions, которые у меня были, были не из-за фрагментов, а для некоторых классов моего проекта, которые используют фрагменты для отображения информации – Will

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