0

J'ai 6 Fragments dans une activité que j'ai créée en tant que Je veux glisser de l'un à l'autre et les ai besoin de ne pas être rejeté mais onyl hide/show y le viewpager.6 Fragments cachés/affichés par ViewPager sans être rejetés

Existe-t-il un moyen de dériver une classe viewpager ou un SectionsPagerAdapter pour le faire.

Je l'ai déjà ajouter

mViewPager.setOffscreenPageLimit(6); 

mais cela n'a pas fonctionné. Lorsque vous passez du 4ème fragment au 3ème ou au 5ème, l'application se bloque.

parties pertinentes de mon code simpified et renommé des classes Fragment pour obtenir le code lisible:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    // create the fragment once for all ! 
    if (savedInstanceState == null) { 
     fragment1 = Fragment1.newInstance(1); 
     fragment2 = Fragment2.newInstance(2); 
     fragment3 = Fragment3.newInstance(3); 
     fragment4 = Fragment4.newInstance(4); 
     fragment5 = Fragment5.newInstance(5); 
     fragment6 = Fragment6.newInstance(6); 
    } 
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 
    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.container); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 
    mViewPager.setOffscreenPageLimit(6); 
    }); 


    public static class Fragment1 extends Fragment { 
    private static final String ARG_SECTION_NUMBER = "section_number"; 

    public Fragment1() { 
    } 

    public static Fragment1 newInstance(int sectionNumber) { 
     Fragment1fragment = new Fragment1(); 
     Bundle args = new Bundle(); 
     args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
     fragment.setArguments(args); 
     fragment.setRetainInstance(true); 
     return fragment; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_1, container, false); 
     TextView textView = (TextView) rootView.findViewById(R.id.section_label); 
     // "Main Frag" 
     textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER))); 
     return rootView; 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     // The activity is about to become visible again, recalcule 
    } 
} 



    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a PlaceholderFragment (defined as a static inner class below). 
     //return PlaceholderFragment.newInstance(position + 1); 
     switch (position) 
     { 
      case 0 : return fragment1; //instead of Fragment1.newInstance(1); 
      case 1 : return fragment2; 
      case 2 : return fragment3; 
      case 3 : return fragment4; 
      case 4 : return fragment5; 
      case 5 : return fragment6; 
      default: return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     // Show 6 total pages. 
     return 6; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "SECTION 1"; 
      case 1: 
       return "SECTION 2"; 
      case 2: 
       return "SECTION 3"; 
      case 3: 
       return "SECTION 4"; 
      case 4: 
       return "SECTION 5"; 
      case 5: 
       return "SECTION 6"; 
     } 
     return null; 
    } 
} 

Répondre

1

Extend de FragmentSatePagerAdaper votre section adaptateur téléavertisseur et mis mViewPager.setOffscreenPageLimit (6);

+0

@ Rahul.thanks mais cela n'a pas résolu mon problème. J'ai découvert entre-temps que le crash est du à l'utilisation d'un xml pour le 4ème fragment qui l'utilise; – Lotfi

+0

Lotfi