2

J'essaye de lier le ActionBar Tabs à un ViewPager. Au tout début, j'ai créé deux projets distincts pour ActionBar Tabs et ViewPager, et ils fonctionnaient bien. En essayant de lier l'un à l'autre, selon le code ci-dessous, le ViewPager se conforment au TabListener, autrement dit, quand je touche un ActionBar Tab le ViewPager changent en conséquence et affichent le View respectif .Pour un exemple, j'ai trois , Lorsque vous touchez le Tab numéro deux, le ViewPager affiche le numéro de page respectif deux. etc.Liaison des onglets ActionBar à un ViewPager

Mais le ActionBar Tabs ne respectent pas les ViewPager, dans d'autres sens, tout en faisant glisser l'écran pour passer à la page suivante du ViewPager, le ViewPager montre le View mais le ActionBar Tab respectif ne change pas son état actuel sélectionné en fonction du ViewPager actuellement sélectionné View. Par exemple, lorsque vous faites glisser vers le numéro ViewPage trois, le ViewPager affiche son View respecté qui est le numéro trois, MAIS, le ActionBar Tab actuellement sélectionné ne change pas pour être le numéro trois. Je pourrais accéder à ViewPage trois tandis que le Tab en surbrillance est numéro un.

J'espère avoir expliqué clairement le problème.

MainActivity

private ViewPager mViewPager; 
private MyTabsPagerAdapter mPagerAdapter; 
private ActionBar mActionBar; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    List<Fragment> mFragList = new ArrayList<Fragment>(); 
    mFragList.add(new Fragment01()); 
    mFragList.add(new Fragment02()); 
    mFragList.add(new Fragment03()); 

    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mActionBar = getActionBar(); 
    mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    mPagerAdapter = new MyTabsPagerAdapter(getSupportFragmentManager(), mFragList); 
    mViewPager.setAdapter(mPagerAdapter); 

    for(int i=0; i<mFragList.size(); i++) { 
     mActionBar.addTab(mActionBar.newTab().setText("Fragment0"+(i+1)).setTabListener(this));   
    } 
} 
@Override 
public void onTabReselected(Tab arg0, FragmentTransaction arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onTabSelected(Tab arg0, FragmentTransaction arg1) { 
    // TODO Auto-generated method stub 
    mViewPager.setCurrentItem(arg0.getPosition()); 
    //mActionBar.setSelectedNavigationItem(arg0.getPosition()); 
} 

@Override 
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) { 
    // TODO Auto-generated method stub 

} 

}

MyTabsPagerAdapter

public class MyTabsPagerAdapter extends FragmentPagerAdapter { 

List<Fragment> mFragList; 

public MyTabsPagerAdapter(FragmentManager fm, List<Fragment> mFragList) { 
    super(fm); 
    // TODO Auto-generated constructor stub 
    this.mFragList = mFragList; 
} 

@Override 
public Fragment getItem(int arg0) { 
    // TODO Auto-generated method stub 
    return this.mFragList.get(arg0); 

} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return this.mFragList.size(); 
} 

}

Répondre

4

Vous devez définir un auditeur lorsque les changements de viewpager par exemple,

mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 
      actionBar.setSelectedNavigationItem(position); 
     } 
    }); 

Ce attend le viewpager de changer et quand il le fait, il définit la position de actionbar égale à la position que vous avez déplacé le viewpager à .

+0

Merci J'ai essayé pendant 2 semaines, et j'ai vraiment trouvé cet auditeur mentionné dans un tutoriel. maintenant ça marche – user2121

+0

Heureux qu'il travaille pour vous maintenant. – user3331142

Questions connexes