我指的是link for swipeable tabs using fragments。它对我有用,但如果我需要动态添加标签数而不预先指定标签数呢?例如,我的一些逻辑给了我在aarray中有时输出2个字符串,有时在数组中输出4个字符串。根据逻辑,我需要在运行时设置操作栏中的选项卡数量。我怎样才能做到这一点?任何人都可以告诉我如何实现我的需求吗?
答案 0 :(得分:5)
第1步:
按如下方式定义TabsPagerAdapter
:
public class TabsPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> list;
public TabsPagerAdapter(FragmentManager fm, ArrayList<Fragment> list) {
super(fm);
this.list = list;
}
@Override
public Fragment getItem(int index) {
return list.get(index);
}
@Override
public int getCount() {
return list.size();
}
}
第2步:
在运行时确定标签数量时,首先要确保创建所需数量List
的{{1}}。您可以使用 this :
Fragment
或 此:
ArrayList<Fragment> list = new ArrayList<Fragment>();
for(int i = 0; i < tabcount; i++){
list.add(MyFragment.newInstance());
}
第3步:
为ArrayList<Fragment> list = new ArrayList<Fragment>();
list.add(new GamesFragment());
list.add(new TopRatedFragment());
list.add(new MoviesFragment());
创建Adapter
时,在ViewPager
的构造函数中传递ArrayList
个Fragment
:
TabsPagerAdapter
试试这个。这将有效。
答案 1 :(得分:2)
在Adapter
制作方法addTab
中,例如:
private final ArrayList<TabInfo> tabs = new ArrayList<TabInfo>();
public void addTab(String tabName, Class<?> clss, Bundle args)
{
TabInfo info = new TabInfo(clss, tabName);
tabs.add(info);
notifyDataSetChanged();
}
... ...
static final class TabInfo
{
private final Class<?> clss;
private final String title;
TabInfo(Class<?> _class, String _title)
{
clss = _class;
title = _title;
}
和您的方法getCount
:
@Override
public int getCount(){
return tabs.size();
}
所有片段/标签应由addTab
添加:
mAdapter.addTab(getResources().getString(R.string.tab_name), YourFragment.class, null);