我有11项的制表布局。我需要从选项卡布局中删除现有的项目,只需要显示选中的项目,例如只有4个项目,而不是11个。下面是我的代码。我选择的项目在(str)中。"String [] str = constants.selectedCategories;"所有我现在需要做的是,我需要设置一个tablayout与项目在str .我怎么能做到这一点。
viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
下面是viewpagerAdapter代码
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
if (position == 0) {
fragment = new FashionFragment();
} else if (position == 1) {
fragment = new JewelFragment();
} else if (position == 2) {
fragment = new RestaurantFragment();
} else if (position == 3) {
fragment = new SuperMarketFragment();
} else if (position == 4) {
fragment = new HomeApplianceFragment();
} else if (position == 5) {
fragment = new MobileStoreFragment();
} else if (position == 6) {
fragment = new MotorFragment();
} else if (position == 7) {
fragment = new ConstructionElectricalFragment();
} else if (position == 8) {
fragment = new SalonFragment();
} else if (position == 9) {
fragment = new BakeryFragment();
}
else if (position == 10) {
fragment = new OtherFragment();
}
return fragment;
}
@Override
public int getCount() {
return 11;
}
@Override
public CharSequence getPageTitle(int position) {
String title = null;
if (position == 0) {
title = "Fashion";
} else if (position == 1) {
title = "Jewellery";
} else if (position == 2) {
title = "Restaurant";
} else if (position == 3) {
title = "Super Market";
} else if (position == 4) {
title = "Home Appliance";
} else if (position == 5) {
title = "Mobile & Computer accessories";
} else if (position == 6) {
title = "Motors";
} else if (position == 7) {
title = "Construction & Electricals";
} else if (position == 8) {
title = "Saloon & Spa";
} else if (position == 9) {
title = "Bakkery & Sweets";
}
else if (position == 10) {
title = "Others";
}
return title;
}
}
我建议你用
FragmentStatePagerAdapter
代替FragmentPagerAdapter
作为您的viewpage中的片段数不是静态的,有大量的片段页。
你需要在ViewPagerAdapter的构造函数中传递一个片段列表和它的名字,每当你想要添加或删除片段时,你只需要从列表中删除或添加片段并通知适配器。
public class ViewPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> fragmentList = new ArrayList<Fragment>();
private ArrayList<String> fragmentName;
public ViewPagerAdapter(FragmentManager fm, ArrayList<String> name, ArrayList<Fragment> list) {
super(fm);
this.fragmentList = list;
this.fragmentName = name;
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
@Override
public CharSequence getPageTitle(int position) {
return fragmentName.get(position);
}
public void addTab(Fragment fragment, String name) {
fragmentList.add( fragment);
fragmentName.add( name);
}
public void removeTab(int position) {
fragmentList.remove(position);
fragmentName.remove(position);
}
}
ArrayList<Fragment> fragmentList;
fragmentList = new ArrayList<Fragment>();
fragmentList.add(new Fashion());
fragmentList.add(new Jewellery());
fragmentList.add(new Restaurent());
.....
ArrayList<String> name;
name = new ArrayList<String>() {
{
add("Fashion");
add("Jewellery");
add("Restaurent");
.....
}
};
初始化:viewpage
viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(),name,fragmentList);
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
添加片段
viewPagerAdapter.addTab(new Motors(),"Motors");
viewPagerAdapter.notifyDataSetChanged();
删除片段
viewPagerAdapter.removeTab(3);
viewPagerAdapter.notifyDataSetChanged();