安卓活动与视图的区别

5
抱歉,我知道这个主题已经被讨论过了。 我已经阅读了相关帖子,但仍有点困惑。 我正在开发一个应用程序,虽然原型将具有3个主要屏幕,但最终将拥有数十个屏幕。 每个屏幕都会呈现动态更改的状态或接受用户输入。 为了进行可视化,需要像MS Word或典型的PC那样布局。 它在顶部有状态栏,在底部有导航栏,对所有屏幕都是共同的(某些屏幕略有调整,例如不同的图标),中间是需要使用适当的布局更新的视图窗格。
状态、导航栏和每个屏幕都在其自己的布局xml文件中定义。 在我的第一个尝试中,我只使用了ViewFlipper,并将3个屏幕布局加载到其中。 但是,这意味着我目前有一个主Activity,随着我继续添加屏幕,它将无法维护。
1. 对我来说,每个屏幕布局都应该有一个关联的Activity类,了解如何控制该屏幕。 我需要弄清楚如何动态加载到中心窗格。 但是,我认为我在另一篇帖子中读到,使用多个Activity可能会消耗CPU和RAM。
2. 目前,我尝试将其中一个屏幕作为自己的Activity,并通过创建Intent然后调用startActivity从主Activity启动它。 但是这会导致新的屏幕Activity位于主Activity之上。 有趣的是,然后按返回按钮会关闭该活动并将其返回到主活动。
3. 到目前为止,我还没有弄清楚如何设置不同的活动控制中心窗格中发生的事情。
4. 如果我继续走多个Activity的道路,我的主Activity应该继承ActivityGroup吗?
5. 在这种情况下,使用View类更适用吗?
我知道这是一篇很长的文章。 我将感激任何建议。谢谢! CB
3个回答

3
正如您所注意到的,Android会隐式地跟踪任务中已启动活动的堆栈,并且“返回”按钮会结束顶部活动,重新激活下面的活动。我建议您考虑用户可能期望后退按钮执行哪些操作,并使活动沿着这些线路分离。
我没有使用过ActivityGroup,所以无法为您提供建议。如果您选择完全独立的活动,则可以让它们都使用相同的“外壳”内容视图和共同的导航/状态栏。有一个超类或实用程序类来处理从那里填充和管理。然后使用LayoutInflater(您可以调用getLayoutInflater())在中间填充特定于Activity的视图。
如果您希望其中一个活动具有多个屏幕,则仍可能在中心插槽中使用ViewFlipper。同样,您希望在您希望用户能够返回的任何位置进行Activity转换;这也意味着在屏幕紧密相关或属于正在完成的同一逻辑事物的情况下,您可能不想改变活动。 (您可以覆盖返回按钮的行为,但除非您有充分的理由,否则最好安排应用程序以使Android的基本设置有助于您的应用程序UI,而不是相互作用。)

感谢您的输入,我正在使用的方法是让我的主Activity为用户提供选择初始屏幕(A、B或C,每个屏幕都有自己的Activity)的选项。主Activity通过startActivityForResult启动它。然后用户可以通过点击/滑动选择左/右以查看新屏幕。但是,我对我正在进行的hack实现不满意。Activity在自身上调用onFinish返回到主Activity,并传回用户选择的左/右和主Activity启动适用的Activity。当然,现在返回键无法按照我想要的方式工作。有什么建议吗? - bursk
我翻译上一部分的措辞可能不正确,根据我的当前实现,点击返回按钮将带用户返回到主屏幕,在那里他们可以选择A、B或C来显示。然而,如果用户在A上滑动以查看B,我认为期望可能是当他们点击返回时回到A,而不是回到主屏幕。但是,我也不想让他们在退出之前反复点击返回多次。我倾向于在我的主要活动中保留一个活动列表,然后尝试自己处理它。 - bursk
在我之前的应用程序中,我从未不得不处理超过几个活动。使用选项卡方法足够容易,但我现在正在制作的应用程序必须具有现有 Windows 应用程序的外观/感觉,该应用程序具有更多层次的屏幕布局。 - bursk

1
你可以使用带有片段的视图分页器来实现不同视图之间的翻转,但仍允许活动对其进行全面控制。活动可以控制菜单,而片段控制您的查看区域。这样,您的返回按钮将正确地关闭包含与活动相关的所有页面的活动,而不是沿着堆栈向下走。

1
如果您想以您所说的方式使用活动,您可以考虑使用选项卡活动。它实际上可以按照您想要的方式工作,您只需要隐藏选项卡小部件并在那里放置导航栏。或者,如果您有更多时间,您可以深入一点,像Walter提到的那样制作自己类似选项卡的ActivityGroup。

不要忘记,现在ActivityGroup已经被弃用了。 - alshapton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接