如何在运行时使用片段动态设置操作栏中可滑动选项卡的数量
How to dynamically set number of swipeable tabs in Action Bar with Fragments at runtime
我指的是这个 link for swipeable tabs using fragments。它对我有用,但是如果我需要动态添加选项卡的数量而不是预先分配选项卡的数量怎么办?例如,我的一些逻辑让我有时在数组中输出 2 个字符串,有时在数组中输出 4 个字符串。根据逻辑,我需要在运行时设置操作栏中的选项卡数量。我怎样才能做到这一点?谁能告诉我如何实现我所需要的?
第 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 步:
当您在运行时确定选项卡的数量时,首先确保创建所需数量 Fragment
的 List
。您可以使用 this:
ArrayList<Fragment> list = new ArrayList<Fragment>();
for(int i = 0; i < tabcount; i++){
list.add(MyFragment.newInstance());
}
或 这个:
ArrayList<Fragment> list = new ArrayList<Fragment>();
list.add(new GamesFragment());
list.add(new TopRatedFragment());
list.add(new MoviesFragment());
第 3 步:
当您为 ViewPager
创建一个 Adapter
时,在 TabsPagerAdapter
的构造函数中传递 Fragment
的 ArrayList
:
TabsPagerAdapter adapter = new TabsPagerAdapter(fm, list);
试试这个。这会起作用。
在您的 Adapter
make 方法 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();
}
你所有的 fragments/tabs 都应该由 addTab
添加:
mAdapter.addTab(getResources().getString(R.string.tab_name), YourFragment.class, null);
我指的是这个 link for swipeable tabs using fragments。它对我有用,但是如果我需要动态添加选项卡的数量而不是预先分配选项卡的数量怎么办?例如,我的一些逻辑让我有时在数组中输出 2 个字符串,有时在数组中输出 4 个字符串。根据逻辑,我需要在运行时设置操作栏中的选项卡数量。我怎样才能做到这一点?谁能告诉我如何实现我所需要的?
第 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 步:
当您在运行时确定选项卡的数量时,首先确保创建所需数量 Fragment
的 List
。您可以使用 this:
ArrayList<Fragment> list = new ArrayList<Fragment>();
for(int i = 0; i < tabcount; i++){
list.add(MyFragment.newInstance());
}
或 这个:
ArrayList<Fragment> list = new ArrayList<Fragment>();
list.add(new GamesFragment());
list.add(new TopRatedFragment());
list.add(new MoviesFragment());
第 3 步:
当您为 ViewPager
创建一个 Adapter
时,在 TabsPagerAdapter
的构造函数中传递 Fragment
的 ArrayList
:
TabsPagerAdapter adapter = new TabsPagerAdapter(fm, list);
试试这个。这会起作用。
在您的 Adapter
make 方法 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();
}
你所有的 fragments/tabs 都应该由 addTab
添加:
mAdapter.addTab(getResources().getString(R.string.tab_name), YourFragment.class, null);