如何在 android 中使用 viewpager 创建动态选项卡?

2024-01-29

解释:

假设我有多个来自 REST 的类别。我不知道有多少个类别,可能是 5,7 个,有时是 2 个等。我想用 viewpager 将所有类别放在我的选项卡上。我想根据类别大小创建一个选项卡。让我们看看例如假设我的 REST 响应中只有 2 个类别,它只创建两个选项卡。如果它有 5 个类别,则有 5 个选项卡,依此类推。

这是创建选项卡的示例测试示例。

MainActivity.java

public class MainActivity extends AppCompatActivity {

    TabLayout tabLayout;
    ViewPager viewPager;
    Toolbar toolbar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbar=(Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        tabLayout=(TabLayout)findViewById(R.id.tabs);
        viewPager=(ViewPager)findViewById(R.id.viewpager);

        setupViewPager(viewPager);
        viewPager.setCurrentItem(0);
        tabLayout.setupWithViewPager(viewPager);
    }
    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        for(int i=0;i<3;i++){
            adapter.addFragment(new OneFragment(), "ONE");
//            adapter.addFragment(new TwoFragment(), "TWO");
            viewPager.setAdapter(adapter);
        }
    }
}

ViewPagerAdapter.java

public class ViewPagerAdapter extends FragmentPagerAdapter {

    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager){
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment,String title){
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

请问,如何解决???


获得类别大小后,您可以根据类别大小添加动态选项卡,如下所示:

public class MainActivity extends AppCompatActivity {

TabLayout tabLayout;
ViewPager viewPager;
Toolbar toolbar;
int no_of_categories=-1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    toolbar=(Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    tabLayout=(TabLayout)findViewById(R.id.tabs);
    viewPager=(ViewPager)findViewById(R.id.viewpager);

    no_of_categories=YOUR_NO_CATEGORIES;

    for (int i = 0; i < no_of_weeks; i++) {
        tabLayout.addTab(tabLayout.newTab().setText("TAB " + String.valueOf(i + 1)));
    }

    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(),tabLayout.getTabCount());
    viewPager.setAdapter(adapter);

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {

            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });


   }
}

你的适配器类应该如下所示:

public class ViewPagerAdapter extends FragmentStatePagerAdapter {

    int mNumOfTabs;
    Fragment fragment = null;

    public ViewPagerAdapter(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        for (int i = 0; i < mNumOfTabs ; i++) {
            if (i == position) {
                fragment = YourFragment.newInstance();
                break;
            }
        }
        return fragment;

    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return super.getPageTitle(position);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 android 中使用 viewpager 创建动态选项卡? 的相关文章

  • 作为 ViewPager 的一部分更新 ListFragment 中的数据

    我在 Android 中使用 v4 兼容性 ViewPager 我的 FragmentActivity 有一堆数据 这些数据将以不同的方式显示在我的 ViewPager 的不同页面上 到目前为止 我只有同一个 ListFragment 的
  • for循环中更新JLabel的问题

    我的程序的想法是从之前在其他 JFrame 中保存的列表中选择一个名称 我想在标签中一个接一个地打印所有名称 它们之间有很小的延迟 然后停在其中一个名称上 问题是lbl setText String 如果有多个则不起作用setText co
  • 膨胀类 android.support.design.widget.NavigationView 时出错

    我按照 NavigationView 的教程进行操作 但无法解决此错误消息 Error inflating class android support design widget NavigationView 教程链接 https www
  • Android:外部存储上的 mkdirs()/mkdir() 返回 false

    我对此感到疯狂 Log d STATE Environment getExternalStorageState File f new File Environment getExternalStoragePublicDirectory En
  • 避免 @Secured 注释的重复值

    我正在尝试使用以下方法来保护我的服务方法 Secured如下 public interface IUserService Secured ROLE ROLE1 ROLE ROLE2 ResponseEntity saveUser Creat
  • 在Java中如何将字节数组转换为十六进制?

    我有一个字节数组 我希望该数组的每个字节字符串转换为其相应的十六进制值 Java中有没有将字节数组转换为十六进制的函数 byte bytes 1 0 1 2 3 StringBuilder sb new StringBuilder for
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • Time.valueOf 方法返回错误值

    我使用 Time valueOf 方法将字符串 09 00 00 转换为 Time 对象 如下所示 Time valueOf LocalTime parse 09 00 00 当我调用 getTime 来显示我得到的值时 28800000
  • RxJava android mvp 单元测试 NullPointerException

    我是 mvp 单元测试的新手 我想对演示者进行一个非常基本的测试 它负责登录 我只想断言 view onLoginSuccess 这是演示者代码 public LoginPresenter LoginViewContract loginVi
  • 使用 Guava Ordering 对对象列表进行多条件排序

    我有一个类无法实现可比较 但需要根据 2 个字段进行排序 我怎样才能用番石榴实现这一目标 假设班级是 class X String stringValue java util Date dateValue 我有一个清单 List
  • Google Wallet for Digital Goods API 与 Google Play 应用内结算

    想知道 Google 电子钱包结算 API 和 Google Play 应用内结算之间有什么区别 与 Google 电子钱包结算 API 相比 使用 GooglePlay 应用内购买结算服务有何优势 我看到 Wallet API 也支持 A
  • Java HashSet 是线程安全的只读吗?

    如果我通过 Collections unmodifyingSet 运行 HashSet 实例后 它是线程安全的吗 我问这个是因为 Set 文档声明它不是 但我只是执行读取操作 来自 Javadoc 请注意 此实现不是同步的 如果多个线程同时
  • Android 导航组件 - 从“任何地方”/基本片段导航?

    我正在开发一个应用程序 它有一个奇怪的花招 可以在设备旋转时打开特定的片段 在实现 android 的导航组件之前 所需要的只是对当前活动的引用 并且可以在特定时刻向用户显示的任何内容之上执行手动片段事务 但是在转移到导航组件之后 我发现很
  • 如何使用eclipse调试JSP tomcat服务?

    我想使用 Eclipse IDE 调试器来调试单独运行的 JSP Struts Tomcat Hibernate 应用程序堆栈 如何设置 java JVM 和 eclipse 以便设置断点 监视变量值并查看当前正在执行的代码 我刚刚用谷歌搜
  • 为什么不能在 if 语句中声明变量?

    以下 Java 代码无法编译 int a 0 if a 1 int b 0 if a 1 b 1 为什么 不能有任何代码路径导致程序将 1 分配给b无需先声明 我突然想到b的变量范围可能仅限于第一个if声明 但后来我不明白为什么 如果我实在
  • 在java中执行匿名pl/sql块并获取结果集

    我想执行匿名 PL SQL 并需要获取结果集对象 我得到了可以通过在 PL SQL 块内使用游标来完成的代码 但 PL SQL 块本身将以文本形式来自数据库 所以我无法编辑该 PL SQL 块 并且它只会返回两个值 其列名始终相同 它将返回
  • Dart/Flutter 如何编译到 Android?

    我找不到任何具体的资源 Dart 是否被编译到 JVM 或者 Google 的团队是否编译了 Dart VM 以在 JVM 上运行 然后在 JVM 内的 Dart VM 中运行 Dart 前者更有意义 并且符合 无桥 的口号 但后者似乎更符
  • 从 InputStream 中删除换行符

    我喜欢从一个文件中删除所有换行符 对于 n 和 r n java io InputStream 在读取文件时 相应的方法如下所示 param target linkplain File return linkplain InputStrea
  • Recyclerview项目点击涟漪效果[重复]

    这个问题在这里已经有答案了 我正在尝试添加Ripple影响到RecyclerView的项目 我在网上查了一下 但找不到我需要的东西 我努力了android background归因于RecyclerView本身并将其设置为 android
  • PhoneGap Build Android 不显示闪屏

    这是我的 config xml 中与启动屏幕相关的代码

随机推荐

  • CSS中如何从右向左缩放?

    我正在尝试对 div 元素进行动画缩放 但动画是从中心开始扩散的 有没有办法让动画从右开始并向左传播 graybox float right background color gray height 100px width 400px li
  • istio-proxy 在 1 小时后关闭长时间运行的 TCP 连接

    TL DR 我们如何配置 istio sidecar 注入 istio proxy envoy proxy istio egressgateway 以允许长期存在 gt 3 小时 可能空闲的 TCP 连接 一些细节 我们正在尝试执行到 Po
  • 某些 Android 设备将内部存储视为 SD 卡,将外部存储视为 EXTSD

    我有很多来自不同供应商的 Android 设备 其中一些将 mnt sdcard 连接到内部存储 将 mnt extsd 连接到 外部存储 场景1 和其他将 mnt sdcard附加到外部存储 场景2 我认为第二种情况是标准的 因为 And
  • 为什么2to3将mydict.keys()更改为list(mydict.keys())?

    我正在查看 2to3 的输出 其中包含此更改 for file prefix in output keys for file prefix in list output keys where output是一本字典 这一变化有何意义 2to
  • 使用 sed 查找并除以文件中的所有数字

    我试图在 json 文件中查找所有数字 并在 mac 上使用 sed 将它们替换为原始数字的一半值 例如 这里我搜索2010并将其替换为1005 file data json sed i E s 0 9 2010 0 9 1 1005 2
  • 超过 2^32 的枚举标志

    我在我的应用程序中使用枚举标志 枚举可以有大约 50 多个值 因此值最多为 2 50 我只是想知道我可以使用Math Pow 2 variable 来计算这些 当我尝试这样做时 我得到了恒定值编译时错误 除了手动计算 2 的幂并将其代入之外
  • 如何在 .vimrc 中换行?

    我已经设置了一个colorcolumn 80 但我发现我无法在 vimrc 中换行长行 有没有类似C的方法 连接 例如我尝试过这个 但它不起作用 autocmd FileType python setlocal ai si et sta s
  • Android Market - 两次更新之间的等待时间

    我想知道我必须等待多少次才能发布我的申请更新 我想确保更新会出现在 Android 市场的 新闻 部分 你正试图玩弄市场体系 不要那样做 在需要更新时更新您的应用程序 即当您有新功能或错误修复时 根据我的经验 更新太频繁会让现有用户生气 并
  • for 带有 Twig 或 Swig 的循环计数器

    任何人都知道在 Twig Swig 中执行此操作的干净方法 for i 0 i lt 100 i blah endfor 如果你有一个数字 那么你可以将其转换为数组 然后使用 Swig 的标签标准 如果您总是想从 0 开始循环 这是最简单的
  • 增加MongoDB最大连接数

    我在 MongoDB 端遇到一些错误 错误是抱怨它达到了允许的最大连接数 想知道是否有办法增加允许的最大连接数 查看 MongoDB 文档 http www mongodb org http www mongodb org 使用此命令行参数
  • javascript、jquery时间格式

    我有一个问题 如何在 javascript 或 Jquery 中将时间从 24 小时格式更改为 12 小时 最简单的方法 这就是我所拥有的 TempDate datepicker formatDate MM dd yy TempDate v
  • HelloAndroid模拟器问题

    我是第一次尝试 android SDK 我从 HelloAndroid 教程开始 完全遵循每个步骤 但模拟器在没有我的应用程序的情况下启动 日食控制台说 2010 02 23 11 47 55 HelloAndroid 2010 02 23
  • Google 表格复选框结果作为新行

    我们在谷歌表单上有复选框 可以将其输入到谷歌表格中 对复选框的响应以逗号分隔 我们想知道是否可以有新行 这是表单填充工作表的方式 Col A Col B Name Availability Larry Monday Sergey Monda
  • 将数据库表行直接反序列化为 C# 对象 - 有这样做的机制吗?

    我是 C 新手 这可能最终是一个愚蠢的问题 但无论如何我都需要问 C 是否有一种机制可以将执行的 SQL 语句的结果反序列化为 C 对象 我有一个 C 程序 它从 SQL 服务器读取一个表 将行存储在对象中 我手动将每个列值分配给对象成员
  • 如何保持实时 MediaSource 视频流同步?

    我有一个服务器应用程序 它渲染 30 FPS 视频流 然后将其实时编码和复用为WebM 字节流 https dvcs w3 org hg html media raw file tip media source webm byte stre
  • 在页面加载时使用 AngularJS 将 json 绑定到 HTML 表

    我有一个简单的概念验证 我用它作为学习一些 AngularJS 的基础 该代码在 HTML 表中显示一些 JSON 数据 如下所示 HTML div div p Click a here a to load data p table tr
  • 在go(golang)中,如何将接口指针转换为结构指针?

    我想使用一些需要指向结构的指针的外部代码 在调用代码时 我有一个接口变量 当从该变量创建指针时 指针的类型是interface 当我需要它作为结构类型的指针类型时 图像中的代码TestCanGetStructPointer 不知道 Cat
  • Laravel 5.2 致命错误:第 66 行的vendor/composer/autoload_real.php

    我已经上传了我的 laravel 项目local to host 现在我有以下错误 Fatal error require Failed opening required home httpd vhosts mort com httpdoc
  • Android StAX 游标解析器 - 找不到方法 javax.xml.stream.XMLInputFactory.newInstance

    我在用着AsyncTask从 i net 下载并解析 XML 内容 下载和解析 xml 发生在doInBackground 方法 这 达尔维克虚拟机 遇到问题 找不到方法 这是日志LogCat 06 30 13 26 41 148 DEBU
  • 如何在 android 中使用 viewpager 创建动态选项卡?

    解释 假设我有多个来自 REST 的类别 我不知道有多少个类别 可能是 5 7 个 有时是 2 个等 我想用 viewpager 将所有类别放在我的选项卡上 我想根据类别大小创建一个选项卡 让我们看看例如假设我的 REST 响应中只有 2