2013-10-08 5 views
0

J'essaye de créer un fragment qui aurait un ViewPager. Lorsque ce fragment est appelé et validé, il n'affiche que la première image et n'est pas glissable. Des pensées comment y parvenir?Pourquoi ViewPager dans mon fragment ne fonctionne-t-il pas?

Voici le fragment

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentStatePagerAdapter; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class HowToFragment extends Fragment { 

    private ViewPager mViewPager; 
    private MyAdapter mAdapter; 
    private int[] image_id = {R.drawable.image_1, R.drawable.image_2, R.drawable.image_3}; 

    private static int image_pos = 0; 

    public static Fragment newInstance(int pos){ 
     image_pos = pos; 
     return new HowToFragment(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_how_to_image, container, false); 
     v.setBackgroundResource(image_id[image_pos]); 
     return v; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     mViewPager = new ViewPager(getActivity()); 
     mViewPager.setId(R.id.viewPager_howto); 
     FragmentManager fm = getFragmentManager(); 
     mAdapter = new MyAdapter(fm); 
     new setAdapterTask().execute(); 

    } 

    private class setAdapterTask extends AsyncTask<Void,Void,Void>{ 
      protected Void doInBackground(Void... params) { 
       return null; 
      } 

      @Override 
      protected void onPostExecute(Void result) { 
         mViewPager.setAdapter(mAdapter); 
      } 
    } 

    private class MyAdapter extends FragmentStatePagerAdapter{ 

     public MyAdapter(FragmentManager fm) { 
      super(fm); 
      // TODO Auto-generated constructor stub 
     } 

     @Override 
     public int getCount() { 
      return image_id.length; 

     } 
     @Override 
     public Fragment getItem(int position) { 
      return HowToFragment.newInstance(position); 
     } 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      // TODO Auto-generated method stub 
      FragmentManager manager = getFragmentManager(); 
      FragmentTransaction ft = manager.beginTransaction(); 
      ft.remove((Fragment) object); 
      ft.commit(); 

      super.destroyItem(container, position, object); 
     } 


    } 
} 

Répondre

0

Je doute que vous essayez d'exécuter cette application dans la version Android Honeycomb moins. Ce que vous essayez d'obtenir, ce sont des fragments imbriqués. La prise en charge de fragments imbriqués est disponible uniquement depuis jellybean 4.2

+0

Y a-t-il un moyen de l'atteindre? Je cible API8 et jusqu'à API17 –

+0

Vous pouvez utiliser des vues dans la vue flipper au lieu de fragments. Dans ce cas, vous allez sacrifier l'avantage du cycle de vie des fragments. Juste une option. – Praga

+0

Toute bonne ressource que vous pouvez suggérer pour voir flipper? –

Questions connexes