首页 > 解决方案 > 在代码中动态创建选项卡 - Android Studio 3.5

问题描述

我很难理解 Studio 3.5 选项卡式活动模板。因此,接下来,只需使用 Studio 3.5 打开一个新项目并选择选项卡式活动作为您的起始模板。

在这个简单的示例中,我需要一个活动,它添加一个新的选项卡并将信息传递给 PlaceholderFragment 类对象,并设置选项卡标题。每个选项卡都将使用相同的 fragment.xml 布局。并将根据从主要活动传递的数据填充内容。它最初不会以任何选项卡开头。对于此示例,我们假设每次按下模板中的浮动按钮时,它都会添加一个新的 TAB。

有人可以告诉我这应该如何连接吗?通过查看硬编码选项卡数量和选项卡标题的模板,我根本无法弄清楚。我似乎对这种设计模式有一个完整的心理障碍。

标签: androidandroid-studiotabs

解决方案


好的-想通了,所以要回答我的具体问题,以便其他人可以学习。

这个页面帮助我弄清楚了。它是用 Kotlin 编写的,我使用的是 Java;但翻译没问题。 https://www.codeexpedia.com/android/android-tablayout-with-many-tabs-kotlin/

  • 不要修改模板创建的任何一个 XML 文件。
  • 没有修改 PageViewModel.java (我仍然不知道如何使用它,并且在本练习中可能不需要。
  • 不要修改 PlaceholderFragment.java
  • 我对 MainActivity.java 和 SectionsPagerAdapter.java 的修改如下,一目了然。

    公共类 SectionsPagerAdapter 扩展 FragmentPagerAdapter {

    private final Context mContext;
    ArrayList<String> tabNames = new ArrayList<>();
    ArrayList<Fragment> fragments = new ArrayList<>();
    
    public SectionsPagerAdapter(Context context, FragmentManager fm) {
        super(fm);
        mContext = context;
    }
    
    public void add(Fragment fragment, String title) {
        tabNames.add(title);
        fragments.add(fragment);
    }
    
    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }
    
    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return tabNames.get(position);
    }
    
    @Override
    public int getCount() {
        return fragments.size();
    }
    

    }

而对于 MainActivity.java,只需在 FloatingActionButton,onClickListener 中使用这段代码来添加一个新的 Tab。

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int curCount = sectionsPagerAdapter.getCount();
            sectionsPagerAdapter.add(PlaceholderFragment.newInstance(curCount),
                    "TAB " + String.valueOf(curCount));
            sectionsPagerAdapter.notifyDataSetChanged();
        }
    });

仅此而已。


推荐阅读