Here's my tabLayoutCode
mTabLayoutBerita.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
Log.i("onTabSelected", String.valueOf(tab.getPosition()));
mViewPagerBerita.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
And this is in my PagerAdapter
public class PagerBerita extends FragmentPagerAdapter {
private int mNumOfTabs;
private FragmentBeritaByKategori fragmentBeritaByKategori = null;
private List<KategoriItem> mDataListKategoriBerita;
public PagerBerita(FragmentManager fm, int NumOfTabs, List<KategoriItem> mDataListKategoriBerita) {
super(fm);
this.mNumOfTabs = NumOfTabs;
this.mDataListKategoriBerita = mDataListKategoriBerita;
}
@Override
public Fragment getItem(int position) {
fragmentBeritaByKategori = new FragmentBeritaByKategori(mDataListKategoriBerita.get(position).getId());
return fragmentBeritaByKategori;
}
@Override
public int getCount() {
return mDataListKategoriBerita.size();
}
}
I'm trying to create dynamic tab layout, but when the tab already showed up, i get wrong data because the position i use in PagerAdapter is wrong. I've already use setOffscreenPageLimit and not working, i'm so confuse. Any solution for this case ? Thanks a lot.
You are forgot to add ViewPager to tab layout.
TabLayout tabsLayout = (TabLayout) findViewById(R.id.tabsLayout);
ViewPager viewpager = (ViewPager) findViewById(R.id.viewpager);
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
viewpager.setAdapter(adapter);
//Add ViewPager to tab layout.
tabsLayout.setupWithViewPager(viewpager);
viewpager.setOffscreenPageLimit(8);
tabsLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewpager.setCurrentItem(tab.getPosition());
Log.i("TabLayout Position: " + tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
It working fine.
I do like this, is it wrong ?
final CustomViewPager viewPager = findViewById(R.id.pager);
final PagerAdapterBottomNavigation pagerAdapterBottomNavigation = new PagerAdapterBottomNavigation(getSupportFragmentManager(), tab_layout.getTabCount());
viewPager.setAdapter(pagerAdapterBottomNavigation);
viewPager.setCurrentItem(2);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tab_layout));
tab_layout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
tab_layout.getTabAt(2).getIcon().setColorFilter(getResources().getColor(R.color.secondaryTextColor), PorterDuff.Mode.SRC_IN);
tab.getIcon().setColorFilter(getResources().getColor(R.color.secondaryLightColor), PorterDuff.Mode.SRC_IN);
if(tab.getPosition() == 0) {
actionBar.setTitle("Menu");
} else if(tab.getPosition() == 1) {
actionBar.setTitle("News");
} else if(tab.getPosition() == 2) {
actionBar.setTitle("Event");
} else if(tab.getPosition() == 3) {
actionBar.setTitle("Promo");
} else if(tab.getPosition() == 4) {
actionBar.setTitle("Setting");
}
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
tab.getIcon().setColorFilter(getResources().getColor(R.color.secondaryTextColor), PorterDuff.Mode.SRC_IN);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
My PagerAdapter
public class PagerAdapterBottomNavigation extends FragmentPagerAdapter {
int mNumOfTabs;
private FragmentAllMenu fragmentAllMenu;
private FragmentBerita fragmentBerita;
private FragmentEvent fragmentEvent;
private FragmentSetting fragmentSetting;
private FragmentPromo fragmentPromo;
public PagerAdapterBottomNavigation(FragmentManager fm, int NumOfTabs) {
super(fm);
this.mNumOfTabs = NumOfTabs;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
fragmentAllMenu = new FragmentAllMenu();
return fragmentAllMenu;
case 1:
fragmentBerita = new FragmentBerita();
return fragmentBerita;
case 2:
fragmentEvent = new FragmentEvent();
return fragmentEvent;
case 3:
fragmentPromo = new FragmentPromo();
return fragmentPromo;
case 4:
fragmentSetting = new FragmentSetting();
return fragmentSetting;
default:
return null;
}
}
@Override
public int getCount() {
return mNumOfTabs;
}
}
But i check on PagerAdapter getItem(int position), the position wrong but show correct fragment.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.