我的viewpager有一个问题,其中包含3个碎片:当我向左移动时,右边的信息消失,当我向右移动时,左边的信息消失。 通过"信息"我的意思是我的项目中的textViews标签和数据。
此问题导致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);
...
我找到了解决这个问题的方法,也许它是一个&#34;嵌套&#34;片段问题,但我不知道它是什么。
感谢您的帮助!
对不起我的英语,我是法国人;)
告诉我,如果我没有写足够的细节
答案 0 :(得分:1)
默认情况下,ViewPager
一次只在内存中当前页面两侧保留1个屏幕外页面。这意味着您在内存中最多有三页,如果您在第一个或最后一个项目上,则只有两个页面。
您可以通过在ViewPager上调用setOffscreenPageLimit(int)
来调整此项。
但是,你应该小心谨慎,因为这会对内存造成严重影响,特别是在处理碎片时。
听起来真正的问题是你的片段没有正确地重新创建。如果在ViewPager重新创建碎片时遇到NullPointerExceptions,您可能也会在其他情况下遇到它们。
我会花些时间研究导致这些NullPointerExceptions的原因,并尝试解决这些错误。当您更改ViewPager页面时,请特别注意何时调用Fragment的生命周期方法,这应该有助于阐明问题的根源。