Android - 在运行时更改片段布局

2024-01-11

我想在我的应用程序中实现单活动多片段设计。我计划有几个“屏幕”(片段的布局),我将在代码中切换(可能添加到后台堆栈)。

据我了解,每个屏幕中片段的布局是使用布局对象(例如 FrameLayout)设置的,该对象充当片段的占位符(共享相同的 ID)。由于不同的屏幕有不同的片段排列(一个可能是 FrameLayout,另一个可能是 LinearLayout 等),我想知道:如何在运行时在片段布局之间切换?

我了解添加/替换片段(通过 FragmentManager),但我想在实时活动中完全添加包含它们的新布局。有点像“setContentView”的交易......

我该怎么做呢? 谢谢!丹尼.


这当然是可能的,您唯一需要做的就是生成自己的 ID。 ID 可以是任何值,但不能与 aapt ID(R 中的 ID)冲突,并且不能为负数。

以下示例使用一组固定 ID 演示了这一点:

public class MainActivity extends Activity {
    private final int ID_TABLE = 0xA;
    private final int ID_ROW1 = 0xB;
    private final int ID_ROW2 = 0xC;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        LinearLayout ll = (LinearLayout) findViewById(R.id.root);
        TableLayout tl = new TableLayout(this);
        tl.setId(ID_TABLE);
        TableRow tr1 = new TableRow(this);
        tr1.setId(ID_ROW1);
        TableRow tr2 = new TableRow(this);
        tr2.setId(ID_ROW2);
        tl.addView(tr1);
        tl.addView(tr2);
        ll.addView(tl);

        MyFragment frag1 = new MyFragment();
        MyFragment frag2 = new MyFragment();
        MyFragment frag3 = new MyFragment();
        MyFragment frag4 = new MyFragment();

        getFragmentManager().beginTransaction()
            .add(ID_ROW1, frag1, "cell1_1")
            .add(ID_ROW1, frag2, "cell1_2")
            .add(ID_ROW2, frag3, "cell2_1")
            .add(ID_ROW2, frag4, "cell2_2")
            .commit();
        getFragmentManager().executePendingTransactions();
    }
}

为了切换到不同的布局,您可以删除片段并将它们添加到其他位置。
让我知道事情的后续。

编辑:澄清一下,视图和视图组不需要实例化一次,然后在活动的生命周期中保留。只需确保在删除相关视图之前删除或分离所有片段即可。另外,如果您在 onCreate 之外创建和删除视图,您应该确保可以通过使用 onSaveInstanceState 并在 onCreate 中重复该过程来恢复它。阅读图表在这里 http://d.android.com/reference/android/app/Activity.html和关于的段落配置更改 http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges.

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

Android - 在运行时更改片段布局 的相关文章

  • 将JSON数据解析到Android ListView中

    我已经潜伏这个网站很长一段时间了 幸运的是 到目前为止我所有的问题都得到了解答 我希望你们中的一些人能够阐明我的问题 我可以成功地让 ListView 来显示字符串数组 但是当我尝试将 JSON 数据解析为数组时 我的程序只是强制关闭 而
  • 如何在android中批量插入sqlite

    我正在使用 SQLiteOpenHelper 进行数据插入 我需要插入2500个id和2500个名字 所以花费了太多时间 请任何人帮助我如何减少插入时间 我们可以一次插入多条记录吗 任何人都可以帮助我 先感谢您 代码 public clas
  • 如何将Android中的cURL发送到REST服务

    我是 android 新手 我想从 REST 服务获取一些数据 但在初始化发送到 REST 服务的方法时遇到一些问题 您知道 REST 服务使用 cURL 来操作一些数据 POST PUT GET DELETE 现在如何在 android
  • 手机重置后AlarmManager闹钟不触发

    在我的应用程序中 用户加入一个计划 然后第二天中午会出现警报通知 这是我的代码 首先 我在 AlarmManager 中设置一个闹钟 如下所示 set alarm to the next day 12 00 noon of the join
  • Android SQLite 从代码中转储数据库以进行错误报告

    我正在为我的一个 Android 程序开发一种诊断工具 本质上 如果用户遇到问题 我想做一些类似 SQLite 的事情dump 参考 http www sqlite org sqlite html http www sqlite org s
  • 如何在 Android Studio 中构建项目测试目录?

    目前还没有这方面的约定 但是现在我如何构建 Android Studio 的测试目录呢 Android 测试基础 http developer android com tools testing testing android html页面
  • Android WebView文件上传

    我正在开发一个 Android 应用程序 基本上它是一个WebView和一个进度条 Facebook 的移动网站 m facebook com 已加载到WebView 当我单击 选择文件 按钮上传图像时 没有任何反应 我已经尝试了所有的解决
  • 数据未刷新“DynamiteModule:未找到 com.google.firebase.auth 的本地模块描述符类”

    我已经使用 Firebase 很长时间了 到目前为止 除了以下场景之外 一切都很好 有时我注意到我的应用程序不再获取新数据 我正在用一个活跃的监听器监听变化 并且我确实有keepSynced set to true 发生这种情况时 我会在日
  • 如何使用 MotionLayout 调整 TextView 的大小

    我正在尝试创建一个CollapsingToolbar动画使用MotionLayout 我已经成功地将所有内容设置为动画 使其表现得像CollapsingToolbar具有高度的灵活性 这意味着我可以轻松创建很棒的动画 而无需编写大量代码 我
  • 调整 SwipeRefreshLayout 高度,将 View 置于其底部

    I have SwipeRefreshLayout里面一个RelativeLayout 问题是SwipeRefreshLayout占据了屏幕上的所有位置 我需要放置一个视图after这个观点 看图片 https i stack imgur
  • Android OptionsMenu问题,背景始终透明

    我的选项菜单总是不显示背景 背景是透明的 有谁知道如何摆脱这个 我的失败起源活动是从另一个自定义活动扩展的 我在 eclipse 上有这个项目 选项菜单工作正常 但自从我迁移到 AndroidStudio 后 选项菜单始终是透明的 我尝试更
  • 如何为 flutter 绘图应用实现橡皮擦功能

    有一个关于通过 flutter 创建绘图应用程序的视频 YouTube https www youtube com watch v yyHhloFMNNA 它支持当用户点击屏幕时绘制线 点 但我找不到像 Android 本机那样擦除用户绘制
  • Android 10 请求 ACTIVITY_RECOGNITION 权限

    我试图遵守 Google 的要求 为 Android 10 请求 ACTIVITY RECOGNITION 权限 但我似乎不明白为什么没有显示权限弹出窗口 就像其他权限 即位置 存储等 一样 我的代码是 if ContextCompat c
  • 如何从一个活动检索 Double 值到另一活动?

    我制作了一个包含 2 个活动的应用程序 其中第一个活动包含一些 EditText 十进制数字 另一个活动也包含一些 EditText 十进制 现在我想将一个 EditText 的值传递给另一个 但作为 双 而不是作为一个字符串 因为该值将用
  • Android项目中使用java获取电脑的IP地址

    我在用ksoap2 android http code google com p ksoap2 android 我需要使用java获取IP地址 这样我就不必每次都手动输入它 我所说的 IP 地址是指 例如 如果我这样做ipconfig使用命
  • android 中的 java.net.URL ..新手问题

    我是java新手 正在尝试android开发 以下代码生成 malformedURLException 有人可以帮助我识别异常吗 任何提示都会非常有帮助 package com example helloandroid import and
  • 如何检测日期选择器对话框的取消单击?

    我正在使用以下 日期选择器的示例 http developer android com guide tutorials views hello datepicker html http developer android com guide
  • Android 版本低于 Lollipop 时出现 java.lang.NoClassDefFoundError

    我有一台运行 Android 21 的 Nexus 5 设备 我正在测试我的项目 没有任何问题 但是 如果我使用 Google API 19 在模拟器上进行测试 则会显示错误java lang NoClassDefFoundError 如果
  • Android Google 地图无法在当前主题中找到样式“mapViewStyle”

    添加谷歌地图视图时 我扩展了MapView 使用xml编辑器将其添加到活动中 并将我的谷歌地图api密钥手动添加到布局xml文件中 我的权限在清单文件中允许互联网 我想知道的是 在 xml 编辑器中 我收到错误 无法在当前主题中找到样式 m
  • 应用程序关闭时单击 Firebase 通知后打开特定活动/片段

    我知道这个问题似乎重复 但根据我的要求 我在网上搜索了很多帖子 但没有任何对我有用 我的要求 我正在使用 Firebase 来获取推送通知 当应用程序打开时意味着一切正常 但我的问题是 如果有任何推送通知出现 应用程序处于后台 关闭意味着我

随机推荐

  • 我的API函数应该采用shared_ptr还是weak_ptr

    我目前正在设计一个 API 我不确定我的函数是否应该采用shared ptr or weak ptr 有些小部件包含查看器 观众有一个功能add painter这为观看者添加了一位画家 当查看器需要重绘时 它使用其绘制器绘制到缓冲区并显示结
  • IE 11 Bug - 表单内标签内的图像

    在 IE11 中 以下代码将按预期检查单选按钮
  • 由于上下文丢失,WebGL 场景无法渲染

    我有一个带纹理和不带纹理的道路 3D 模型 当我加载没有纹理的道路时 一切正常 60fps 但是当我加载带有纹理的道路时 有两种变体 1 如果 3D 模型不大 那么它可以加载并工作 但 fps 非常低 10 20 2 如果 3D 模型很大
  • PDO 语句比 MySQL CLI 花费的时间长 400 倍 [重复]

    这个问题在这里已经有答案了 我正在运行一个 PDO 准备语句来从大约 6k 行的表中进行选择 由于 WHERE 语句具有约 5k pId 因此该特定查询最终返回所有行 该表在 pId 列上也有一个索引 SELECT FROM table a
  • 如何让 geom_text 与 ggplot2 左对齐

    我想左对齐geom text层与ggplot2 我正在使用以下代码 library tidyverse library hydroGOF library scales summ lt df gt group by Date gt summa
  • Selenium 2 StaleElementReferenceException 将 DropDownList 与 AutoPostBack 与 InternetExplorerDriver 一起使用时

    我正在使用 Selenium 2 使用 InternetExplorerDriver 测试 asp net Web 表单页面 并且遇到 StaleElementReferenceException 该页面包含一个 自动回发 下拉列表 我从中
  • 用千分尺查询数据

    我们有这个奇特的监控系统 我们的 spring boot 服务通过千分尺将指标发布到流入数据库 有一个不错的 grafana 前端 但问题是我们现在处于这样一个阶段 我们必须在其他服务中提供其中一些指标来进行推理 整个体系是我的前任建立的
  • Android 中将值从一个 Activity 传递到另一个 Activity

    您好 我开发了一个应用程序 它有一个文本框和一个搜索按钮 当我在文本框中输入数字并单击搜索按钮时 它需要将输入的值传递到下一个活动 在下一个活动中使用该值来获取值来自数据库 我正在使用以下代码来传递值 search button setCl
  • 字段“$name”必须是累加器对象

    我有一个疑问 当我使用 group https docs mongodb com manual reference operator aggregation group 错误显示 字段 name 必须是累加器对象 如果删除提交的 name
  • RESTful 服务:WCF 与 ASP.NET MVC

    实现 RESTful 服务的一种非常常见的方法是利用 ASP NET MVC 通过 WCF 来实现 ASP NET MVC 通过灵活的 URL 路由和灵活的 HTTP 方法映射到控制器操作 具有出色的 RESTful 支持 WCF 4 0
  • 如何将 Pigz 与 Tar 一起使用

    所以我在 tar 中使用 Pigz tar use compress program pigz 这可行 但它没有使用我的所有处理器 我想确保它是递归的 r 并使用 9 压缩级别 我通读了利用多核进行tar gzip bzip压缩 解压 ht
  • 使用 git 进行贡献

    所以我在github上克隆了一个项目并修复了补丁 因为这是我第一次使用 git 工作 所以我试图找出将其放到网上的最佳方法 在 github 上查看我自己的 克隆的 存储库后 发现只有一个分支 master 我创建了一个分支 myfix 现
  • 如何使用 Bash 伪造 DHCP 发现数据包?

    我想通过网络 LAN 发送经典DHCP 发现使用命令行打包 以便触发来自任何DHCP服务器监听 所以我可以用类似的东西捕获它 假设我的IP地址是192 168 0 30 tcpdump i eth0 host 192 168 0 30 n
  • 在 `aws cloudformation deploy --parameter-overrides` 中,如何将多个值传递给 `List` 参数?

    我在用这个 CloudFormation 模板 https docs aws amazon com AWSCloudFormation latest UserGuide example templates autoscaling html
  • 类型“未定义”不可分配给类型“从不”

    interface A name string age number var a A name age 23 var result A Object keys a as Array
  • 总结 sf::st_intersection() 中几何图形重叠的属性

    我想总结一组几何图形的属性 对它们重叠的值进行求和 library devtools install github r spatial sf library sf m rbind c 0 0 c 1 0 c 1 1 c 0 1 c 0 0
  • 如何查看Tortoise HG发出的Mercurial命令?

    我有办法查看 Tortoise HG 发出了哪些 Mercurial 命令吗 例如 如果我在 Tortoise 中使用 Shelve 命令 我想看看它如何 以及是否 在幕后调用 hg shelve 在某些工具中 有一个 查看 gt 始终显示
  • GCP 实例可以使用单个网络接口的最大带宽是多少?

    我正在使用 n 个并行进程将数据上传到 Google 云存储桶 出口数据速率约为 16Gbps 仅使用 n 个进程并行从 gcp 存储桶下载数据时 入口流量约为 26Gbps 但是当我使用相同的编号同时执行上传和下载时 的进程 入口速率降低
  • Java 方法引用具有泛型参数的方法

    我正在尝试对具有在类声明中指定的通用参数的方法进行方法引用 所以我有 public interface IExecutable p void execute P parameter public class Parameter implem
  • Android - 在运行时更改片段布局

    我想在我的应用程序中实现单活动多片段设计 我计划有几个 屏幕 片段的布局 我将在代码中切换 可能添加到后台堆栈 据我了解 每个屏幕中片段的布局是使用布局对象 例如 FrameLayout 设置的 该对象充当片段的占位符 共享相同的 ID 由