草庐IT

从滑动菜单进行 Android 导航 - fragment 还是 Activity ?

coder 2023-12-09 原文

我正在将使用仪表板模式的 Android 应用程序升级到滑动菜单,带有 library by jfeinstein .

最初我有一个 DashboardActivity,它有 6 个按钮,每个按钮都会在点击时启动相应的 Activity。我还有大约 30 个其他 Activity 可以从这些“顶级” Activity 开始。

现在,我有两种可能的方法:

  1. 定义某种 MenuActivity,其中将包含 SlidingMenu fragment ,并在选定的菜单项上启动 Activity ,就像在旧版本中一样。
  2. 只定义一个 Activity 并将现有 Activity 转换为 fragment ,并在内容框架中显示它们。

在查看滑动菜单库的示例时,我认为这可能是最好的方法,因为它使用了切换 fragment ,但我仍然认为 Activity 比 fragment 更适合屏幕。

是否有任何理由对内容使用单一 Activity 和 fragment ?

最佳答案

Fragments API 是您的 friend 。不完全是。

(改编自互联网和 Glenn Bech 对 SO 的回答)

1。可重复使用

fragment 是 Android 用于创建可重用用户界面的解决方案。您可以使用 Activity 和布局(例如使用包含)实现一些相同的事情。然而; fragment 从 HoneyComb 连接到 Android API。

2。重量轻

Activity 是主要组件,因此有很多额外的责任。就像提供上下文等。没有这些额外的职责, fragment 是轻量级的,并且当你有很多 fragment 时特别有用(当 Activity 被重构为 fragment 时)。我有提到它们很轻吗?

3。使用 API,而不是反对它

Action 条。如果您希望通过选项卡在上面导航您的应用程序,您很快就会看到 ActionBar.TabListener 接口(interface)为您提供了一个 FragmentTransaction 作为 onTabSelected 方法的输入参数。您可能会忽略这一点,并做一些其他的聪明的事情,但您将反对 API,而不是使用它。

4。聪明的 BackStack 和可定制的

FragmentManager 以一种非常聪明的方式为您处理“返回”。返回并不意味着回到上一个 Activity ,就像常规 Activity 一样。它意味着回到以前的 fragment 状态。更棒的是(是的,这是一个词)您可以控制何时以及如何使用 backstack。

5。闪耀魅力

你认为所有好莱坞效果都来自哪里?您可以将酷炫的 ViewPager 与 FragentPagerAdapter 结合使用来创建滑动界面。 FragmentPagerAdapter 代码比常规适配器更简洁,并且它控制各个 fragment 的实例化。您可以应用于 fragment 的过渡和滑动动画是您无法使用 Activity 做的一些事情。

6。平板电脑和手机

更大的手机?不,它是平板电脑。如果您在尝试为手机和平板电脑创建应用程序时使用 Fragments,您的生活将会轻松很多。由于 fragment 与 Honeycomb+ API 紧密相关,您将希望在手机上使用它们以及重用代码。这就是兼容性库派上用场的地方。

7.只有电话的人吧?

您甚至可以而且应该将 fragment 用于仅适用于手机的应用程序。如果您考虑到便携性。我使用 ActionBarSherlock 和兼容性库来创建“ICS 外观”应用程序,这些应用程序看起来一直到 1.6 版都一样。您可以获得最新的功能,例如带有选项卡、溢出、拆分操作栏、viewpager 等的 Actionbar。

还有一件事

8.交叉沟通

fragment 之间交流的最佳方式是 Intent 。当您在 Fragemnt 中按下某些内容时,您通常会调用带有数据的 StartActivity()。 Intent 会传递到您启动的 Activity 的所有 fragment 。只是更容易。

关于从滑动菜单进行 Android 导航 - fragment 还是 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16487834/

有关从滑动菜单进行 Android 导航 - fragment 还是 Activity ?的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby-on-rails - 按天对 Mongoid 对象进行分组 - 2

    在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev

  3. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  4. ruby - 如何进行排列以有效地定制输出 - 2

    这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][

  5. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  6. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  7. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  8. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  9. ruby-on-rails - Ruby 流量控制 : throw an exception, 返回 nil 还是让它失败? - 2

    我在思考流量控制的最佳实践。我应该走哪条路?1)不要检查任何东西并让程序失败(更清晰的代码,自然的错误消息):defself.fetch(feed_id)feed=Feed.find(feed_id)feed.fetchend2)通过返回nil静默失败(但是,“CleanCode”说,你永远不应该返回null):defself.fetch(feed_id)returnunlessfeed_idfeed=Feed.find(feed_id)returnunlessfeedfeed.fetchend3)抛出异常(因为不按id查找feed是异常的):defself.fetch(feed_id

  10. ruby - 捕获 Ruby Logger 输出以进行测试 - 2

    我有一个像这样的ruby​​类:require'logger'classTdefdo_somethinglog=Logger.new(STDERR)log.info("Hereisaninfomessage")endend测试脚本行如下:#!/usr/bin/envrubygem"minitest"require'minitest/autorun'require_relative't'classTestMailProcessorClasses当我运行这个测试时,out和err都是空字符串。我看到消息打印在stderr上(在终端上)。有没有办法让Logger和capture_io一起玩得

随机推荐