如何在运行时使用片段在Action Bar中动态设置可滑动选项卡的数量

时间:2015-02-23 14:53:23

标签: android android-fragments android-actionbar android-viewpager android-tabs

我指的是link for swipeable tabs using fragments。它对我有用,但如果我需要动态添加标签数而不预先指定标签数呢?例如,我的一些逻辑给了我在aarray中有时输出2个字符串,有时在数组中输出4个字符串。根据逻辑,我需要在运行时设置操作栏中的选项卡数量。我怎样才能做到这一点?任何人都可以告诉我如何实现我的需求吗?

2 个答案:

答案 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的构造函数中传递ArrayListFragment

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);