android - 在代码中动态创建选项卡 - Android Studio 3.5
问题描述
我很难理解 Studio 3.5 选项卡式活动模板。因此,接下来,只需使用 Studio 3.5 打开一个新项目并选择选项卡式活动作为您的起始模板。
在这个简单的示例中,我需要一个活动,它添加一个新的选项卡并将信息传递给 PlaceholderFragment 类对象,并设置选项卡标题。每个选项卡都将使用相同的 fragment.xml 布局。并将根据从主要活动传递的数据填充内容。它最初不会以任何选项卡开头。对于此示例,我们假设每次按下模板中的浮动按钮时,它都会添加一个新的 TAB。
有人可以告诉我这应该如何连接吗?通过查看硬编码选项卡数量和选项卡标题的模板,我根本无法弄清楚。我似乎对这种设计模式有一个完整的心理障碍。
解决方案
好的-想通了,所以要回答我的具体问题,以便其他人可以学习。
这个页面帮助我弄清楚了。它是用 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();
}
});
仅此而已。
推荐阅读
- vue.js - 如何在 vue 实例之外设置 mount(computed, watch..) 属性
- python - Django Channels No module named 'asgiref.sync' 错误
- reactjs - Material-UI React 和 webpack 摇树
- r - 从日期列表中获取初始月份
- sql - 提取不匹配的内容或值
- python - 谁能解释以下 TensorFlow 代码?该函数如何识别输入并将其作为 numpy 数组?
- javascript - 当我使用 javascript 创建动态 html 页面时,Jquery 脚本没有加载到头部
- botframework - Microsoft Bot Framework 无法从网络聊天 UI 获取机器人中传递的用户名
- node.js - 聚合和分组 mongodb 数据
- javascript - 使用 PHP 将注册表单数据存储到文本文件