- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试了解如何使用 Fragments 创建能够很好地适应多种屏幕和布局的应用程序。我研究了几个例子:
所有这些都提倡多Activity
方法:
Activity
和多个 Fragment
sFragment
拆分为多个 Activity
。我想到了另一种方法 - 单个 Activity
一个:
Fragment
的 Activity
。Fragment
(s)(使用 FragmentTransaction.show()
/FragmentTransaction.hide()
)。使用 Android 开发者指南使用的相同“新闻文章列表/文章内容”示例进行说明:
News
Activity 同时包含 ArticleListFragment
和 ArticleReaderFragment
。ArticleReaderFragment
最初是隐藏的。当从列表中选择一篇文章时,ArticleListFragment
被隐藏,ArticleReaderFragment
被显示。有人用过类似的方法吗?这种方法可能有任何实际的缺点吗?与多 Activity 方式相比,它看起来更好/更差吗?例如, fragment 不能在 XML 中显示/隐藏 - 为此必须使用 FragmentTransaction
。
想象一个应用程序可以在屏幕上一次显示多达三个“ Pane ”。此外,这些是需要考虑的因素:
为简单起见,让我们不要讨论电视屏幕。
现在,将其转化为设计:
到目前为止,我们还没有考虑任何与 Android 开发人员指南中介绍的新闻阅读器示例有显着差异的内容。唯一的主要区别是有 三个 fragment 而不是两个。
现在,7 英寸标签的情况下只能容纳 2 个 fragment 。这将如何工作?请注意,这里有两种可能的组合:
我只是无法理解这一点。我是否在 ActivityA 中完成所有这些操作?我只是创建一个全新的 ActivityD 吗?我需要创建多少个布局(我数了大约 8 个)?是不是排列太多了?
我确实意识到我上面提出的单一 Activity 方法也可能不适合这种情况 - 因为显示/隐藏 fragment 本身并不简单。
关于如何在不被布局和组合淹没的情况下处理这个问题有什么建议吗?
最佳答案
This @Taylor Clark 的回答非常有用。但是,这并不是我在原始问题中提出的使用单一 Activity 方法的实际经验分享。我着手修改 Android 开发人员指南中的 News Reader 示例以使用单 Activity 方法,并提出了一个可行的解决方案。
还有待观察的是,在哪些用例中这种方法比多 Activity 方法更可取(或者是否有任何此类情况)。此外,我还没有详细了解我的问题的编辑 1 中描述的 3 Pane 方案。
我希望尽快发布我的整个项目,但这里是我如何进行的快速概述:
Activity
:NewsActivityTitlesListFragment
和 DetailsFragment
NewsActivity
中。根据当前的双 Pane ,我显示/隐藏适当的 fragment 。我遇到的一些问题:
是否将布局指定为双 Pane :
在原始新闻阅读器示例中,双 Pane 布局有一个 FrameLayout
用于保存新闻详细信息。我们通过测试这个 Frame Layout 的存在来判断我们当前是否处于双 Pane 布局中。
但是,在我的解决方案中,两个 fragment 始终存在于所有布局中。我通过在我想要成为双 Pane 的布局中包含一个 ID 为 dualPane
和 android:visibility="gone"
的 View
来解决这个问题并在单 Pane 布局中省略此 View 。然后,这是一个问题
mDualPane = findViewById(R.id.dualPane)!=null;
编辑:
有比使用虚拟 View 更好的方法来指定双 Pane 。我更喜欢创建一个 boolean 资源。例如,我有一个 config.xml
如下:
<resources>
<bool name="dual_pane">false</bool>
</resources>
然后,我可以将其他 config.xml
文件放在 values-xlarge-land
、values-port
或 values 等文件夹中-sw600dp
等并根据需要将 boolean 值调整为 true
或 false
。
那么,在代码中就是getResources().getBoolean(R.bool.dual_pane);
关闭详细信息 fragment
这是区分 Activity
关闭和 Fragment
关闭的问题。最后,我不得不重写 onBackPressed()
如下:
super.onBackPressed()
;TitlesListFragment
,调用super.onBackPressed()
;DetailsFragment
中,则将其视为关闭 fragment 。这意味着隐藏它并显示 TitlesListFragment
。这并不理想,但这是我能想到的最好的。
编辑:
根据@SherifelKhatib 在评论中的建议,有一种更简洁的方式来处理后退按钮按下:只需将显示/隐藏细节 fragment 的事务添加到 fragment 后台堆栈。这样,当您按下后退按钮时, fragment 事务就会被反转。如果您希望在其他按钮单击时这样做,也可以手动弹出 backstack。
关于java - fragment 设计 : Adapting to multiple screen layouts by showing/hiding fragments within a single Activity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10051962/
我正在尝试设计我的输入:文件。以下 SO 问题让我完成了 95% 的任务。区别在于我使用的是 HTML5 multiple=multiple 属性。 How to style "input file"
我一直在进行一项实验,其中多个调查参与者使用可穿戴技术聆听多首音乐来跟踪多条信息,两个例子是 BPM(心率)和 T(体温)。 目标是衡量每首音乐(以用户反馈为特征)对人类情感的影响。 目前,所有数据都
我使用 jquery 添加/删除输入 我使用append为日期/收入添加多个Tr 我还使用另一个附加来添加多个 td 以获取同一日期 Tr 中的收入 我添加多个日期输入,并在此表中添加多个收入输入 我
在 Android 中,有一种方法可以为项目中的所有模块生成签名的 APK。例如。我有以下项目 Project -- Library Module -- Module 1 -- Modul
我有一个用于网站展示的系统。 展览数据可能来自差异表中的多个数据。 喜欢这个设计: Table [ExhibitionType] used for differentiate category. Ta
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我正在使用 UILocalnotification...收到通知时,当应用程序处于事件模式时我打开 viewcontroller...但是如果同时收到多个通知...我如何打开多个 viewcontro
我遇到的问题是一个策略浏览器游戏,它有 7 种类型的值。问题如下: 我在 $_POST 中获得了 7 个不同的值,包括从索引 unit_1 到索引 unit_7。这 7 个值是 0 到 20 之间的整
这个问题已经有答案了: Search Large Text File for Thousands of strings (3 个回答) 已关闭10 年前。 我想在多个文件上“grep”多个正则表达式。
我经常对如何在我的应用程序中解决这个问题感到矛盾。我使用了很多选项,包括: 一个通用的多选 - 这是我最不喜欢和最很少使用的选项。我发现可用性非常糟糕,一个简单的误点击就会毁了你所有的辛勤工作。 “自
以下是 couchbase 中的示例文档之一。 { "name":"abc", "friends":["a","b","c"], "bestfriends":["x","y","z"] }
我有 4 张 table 。 表组 | ID | NAME | 1 Premium 2 Silver 表用户 | ID | group_id | NAME | 1
我正在开发一个使用第三方服务(Facebook、Google 等)对用户进行身份验证的应用程序。我为每个用户提供一个内部 ID(uuid v4),该 ID 与他们的第 3 方 ID 相关联。现在,我的
我是 bicep 新手,一直在努力实现 Bicep 脚本来部署具有许多主题和订阅的 Azure 服务总线。 我添加的每个主题都有可变数量的订阅(例如,通知主题可能有 3 个订阅,但分析主题可能有 2
我是 bicep 新手,一直在努力实现 Bicep 脚本来部署具有许多主题和订阅的 Azure 服务总线。 我添加的每个主题都有可变数量的订阅(例如,通知主题可能有 3 个订阅,但分析主题可能有 2
我必须创建一个大型数据库。它将保存来自 100 多个设备的数据,并不断更新数据库。每 10 秒,每个设备都会更新数据库中的一行。是为每个设备数据建立一个单独的表还是将数据与设备 ID 放在同一个表中更
我需要在 Activity 开始时显示“正在加载”进度对话框,然后在加载完成后显示一些内容。在我的 onresume 中,我有类似这样的代码: loadThread = true; Thread sh
我有一个 html 表单 当我提交表单时,假设对于 id = 1,数量为 5 或 对于 id = 3,数量为 8。如何在java脚本或jquery中获取这些值并将这些信息提交到服务器?我
我正在创建一个 Mozilla 扩展程序,通过单击“转换按钮”(标签:转换)将网页内容转换为其他语言它的标签被转换为英文,以便单击该按钮(标签:英文)内容被转换为原始形式 我尝试为每个选项卡设置属性“
我正在尝试根据 进行搜索 我通过运行代码从 select 中获取值: for($i=0;$i= '$age_from' AND users.user_age = '$age_from' AND u
我是一名优秀的程序员,十分优秀!