Android, Comment mélanger ActionBar.Tab + Vue Pager + ListFragment

J'ai essayé de tester la façon de mélanger toutes ces choses ensemble, et je vais avoir des problèmes!!
J'ai juste envie d'une application avec trois onglets à l'aide de l'ActionBar.Onglet. Par exemple, ces onglets peuvent être des films de genres d'Action, d'Aventure et d'Animation, l'utilisateur peut parcourir les onglets, donc il va utiliser le ViewPager et chaque onglet affiche une liste des films de ce genre. Il n'y a pas besoin d'avoir trois différents fragments classes parce que tous les onglets sera le même format d'une simple liste.
Et je vais avoir des problèmes parce que quand je sélectionne le deuxième onglet, la position de onPageSelected est de 1,

mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mCollectionPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
     public void onPageSelected(int position) {
        mActionBar.setSelectedNavigationItem(position);
     }
});

Cela provoque l'appel à la méthode public Fragment getItem(int i) à l'intérieur de la CollectionPagerAdapter classe, mais alors la valeur de i est à 2 PAS 1, alors il appelle la createView pour la TabFragment classe avec une valeur de 2 PAS 1, de sorte que les onglets ne sont pas rafraîchissant avec succès.

Toute aide sera vraiment apprécié!!

Code pour créer les onglets,

//For each of the sections in the app, add a tab to the action bar.
for (int i = 0; i < mCollectionPagerAdapter.getCount(); i++) {
        mActionBar.addTab(mActionBar.newTab()
            .setText(mGenres.get(i).getName()) 
            .setTabListener(this));

        //Let's request the movies for the first three genres
        new GetMoviesByGenre().execute(mGenres.get(i).getId());         
}

Lorsqu'un onglet est sélectionné,

@Override
public void onTabSelected(ActionBar.Tab tab, android.app.FragmentTransaction arg1) {

//Let's update the dataset for the selected genre
TabFragment fragment = 
      (TabFragment) getSupportFragmentManager().findFragmentByTag(
                   "android:switcher:"+R.id.pager+":"+tab.getPosition());
     if(fragment != null)  //could be null if not instantiated yet
     {
        if(fragment.getView() != null) 
        {
           fragment.updateDisplay(tab.getPosition()); //do what updates are required
        }
     }

  mViewPager.setCurrentItem(tab.getPosition());
}

CollectionPageAdapter classe

public class CollectionPagerAdapter extends FragmentPagerAdapter {

final int NUM_ITEMS = 3; //number of tabs

List<Fragment> fragments = new ArrayList<Fragment>();

public Fragment getItem(int pos) {
  return fragments.get(pos);
}

public void addFragment(Fragment f) {
  fragments.add(f);
}

public CollectionPagerAdapter(FragmentManager fm) {
    super(fm);

    //Let's add  the fragments
    for (int i=0;i<NUM_ITEMS;i++)
    {
        Fragment fragment = new TabFragment();
        Bundle args = new Bundle();
        args.putInt(TabFragment.ARG_OBJECT, 0);
        fragment.setArguments(args);
        addFragment (fragment);
    }
}

@Override
public int getCount() {
    return NUM_ITEMS;
}

}

TabFragment classe

public class TabFragment extends ListFragment {

public static final String ARG_OBJECT = "object";

private MoviesAdapter m_Adapter;
private ArrayList <Movie> mMovies = new ArrayList<Movie>();

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

  //you only need to instantiate these the first time your fragment is
  //created; then, the method above will do the rest
  if (m_Adapter == null) {
      m_Adapter = new MoviesAdapter(getActivity(), mMovies);
  }
  setListAdapter(m_Adapter);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {

    int position = getArguments().getInt(ARG_OBJECT); //to check is the right fragment
    View rootView = inflater.inflate(R.layout.tabs, container, false);
    return rootView;
}

public void updateDisplay (int type)
{
     GlobalVars gv = (GlobalVars)getActivity().getApplicationContext();

    switch (type)
    {
        case 0:
            mMovies = gv.getActionMovies();
            break;
        case 1:
            mMovies = gv.getAdventureMovies();
            break;
        case 2:
            mMovies = gv.getAnimationMovies();
            break;
    }

    m_Adapter.notifyDataSetChanged();
}

}

Je ne sais pas ce que je fais mal, je suppose que les fragments sont foiré, parce que quand j'appuie sur le deuxième onglet, les données du premier onglet est mis à jour, et ainsi de suite ...

Merci!

Ok je pense que le changement dans l'indice entre la position dans l'onglet sélectionné et le getView index dans la vue pager est parce que la vue de radiomessagerie est en train de préparer lui-même pour afficher la page suivante. Mais je n'arrive pas à en informer l'adaptateur de la listfragment que le contenu a changé. Un simple exemple de texte est un travail, mais pas quand il y a une liste impliqués.

OriginalL'auteur nirvik | 2013-01-05