正如 Android 文档所述:“Activity 是用户可以做的单一、集中的事情。”
然而,使用 Fragments 我们将能够在与 Reto Meier suggest 相同的 Activity 中做很多“事情” .他的建议是在同一 Activity 中用内容 fragment 替换选择 fragment (“在我们的代码中这会产生两难选择”部分)。
假设我的应用程序“有点”复杂,有很多 Activity ,有一个复杂的导航树,并且在设计时考虑了“用户可以做的单一、集中的事情”原则。
假设现在我必须使其适应 Fragments 和大屏幕...而且我不想创建第二个应用程序,一个应用程序中也没有两个完全不同的逻辑(一个用于手机,另一个用于表格)。
我是否应该有一个 Activity 来管理所有应用程序 fragment 和 fragment 事务?就像 Retro Meier 上面建议的那样。这是推荐的路径吗?从而打破 Activity 的“用户可以做的单一的、集中的事情”原则?
还是我遗漏了什么?我希望 ;)
顺便说一句,我认为 Fragments 看起来很棒,但从我到目前为止所看到的情况来看,前提是您要从头开始创建应用程序。因为让应用程序与手机和平板电脑兼容看起来有点乏味。希望是错误的:)
Dianne Hackborn already has answered (感谢链接 mgv):
you could put your entire application in one activity in which you change the fragment structure as its state changes
这样,Activity 就变成了一种容器,您可以在其中插入 Fragment。我喜欢这种方法,但是......在我的应用程序中有大约 30 种不同的操作可用,每个操作需要执行大约 2 到 4 个屏幕步骤(表单和选择列表),所有这些都不同并且还有导航限制。它适用于每个处理一个屏幕/步骤行为的 Activity 。
那么为了移植到 Fragments,我应该将每个屏幕逻辑移动到 Fragments,并使用 Activity 作为每个操作的容器。因此,让 Activity 成为管理每个操作的 Fragment 之间导航的 Activity,对吧?看起来适应长应用程序会很痛苦。 :(
顺便说一句,当前的 Activity 定义应该有所改变。 :)
最佳答案
Should I have one Activity to manage all the application fragments and fragment transactions?
这不可能抽象地回答。然而,即使在基于 fragment 的世界中,大多数应用程序都会有多个 Activity 。其中一些是为了适应较小的屏幕尺寸,其中每个 Activity 往往是一个 fragment 。其中一些将是框架所必需的(例如,从 PreferenceActivity 继承)。而且,其中一些将通过 GUI 设计。
Thus breaking with the "single, focused thing that the user can do" principle for Activities?
这部分文档是在 2008 年编写的,也许更早。如果当时存在 fragment ,我想文档会声明 fragment 是“用户可以做的单一、集中的事情”, Activity 作为编排层,确定哪些 fragment 在什么情况下可见。
文档不会在所有地方都更新以反射(reflect) fragment ,即使更新也需要一些时间。对于 2011 年的余额,您至少需要自己翻译 2008 年的指令,以将它们转换为 2011 年的基于 fragment 的 UI。
Lets say now I have to adapt it to Fragments and large screens... and that I don't want to create a second application, neither have two completely different logics (one for phones other for tables) inside one application.
我不知道您认为“完全不同的逻辑”是什么。在基于 fragment 的应用程序中,您的大部分业务逻辑都在 fragment 本身中。这些 Activity 再次充当编排层,确定哪些 fragment 应该可见并协调事件处理。后者会比以前复杂一些,因为有时单击列表中的项目会弹出一个新 fragment ,有时单击列表中的项目会启动新 Activity ,具体取决于屏幕大小。
Or am I missing something?
老实说,您的问题不够具体,无法合理回答。
关于android - Fragments如何影响Activity "single, focused thing that the user can do"原理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5718108/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/