launchModes,singleTask:如何在“屏幕”之间切换?

在一些问题中(比如这个问题),我一直在研究如何在我的应用程序中“更换屏幕”。 我在上面有一个“标题”,有4个按钮。 每个按钮都是为了替换“内容”(即更改屏幕):

+--------------------+
| menu with buttons  |
+--------------------+
|                    |
|                    |
|  C O N T E N T     |
|                    |
|                    |
+--------------------+

当我点击一个菜单按钮时,我运行下面的代码:

@Override
public void onClick(View v)
{
    Intent myIntent = new Intent(BaseActivity.this, ActivityMain.class);
    BaseActivity.this.startActivity(myIntent);
}

正如你所见,startActivity被执行。 现在,如果我没有为Activity指定“launchMode”,那意味着launchMode = normal。 如果launchMode == normal,这意味着每次使用顶部标题按钮进行导航时都会重新创建Activity,这意味着以“表单元素”输入的所有数据都消失了(或至少隐藏)。

所以,我发现launchMode“singleTask”听起来不错。 如果我将launchMode添加到我的Activity中,那么当我使用按钮进行导航时,将不会重新创建launchMode,从而保持状态。 大! 那么,直到我读到这个:

如上所述,“singleTask”或“singleInstance”活动中不会有多个实例,因此该实例预计会处理所有新的意图。

我发现这句话意味着可以只有一个Activity将launchMode设置为“singleTask” - 如果我有多个它不会工作(尽管没有编译器错误)。

这意味着我只能在一次活动中“保持状态”,在屏幕之间来回切换(导航)!

再一次,这真的是它应该如何工作?


你似乎在强迫活动存在于他们不应该存在的地方。

如果你打算使用按钮作为虚拟标签,那么应该有一个活动,没有startActivity()调用,并使用ViewFlipperFrameLayout或其他来改变你的内容来匹配按钮。 毕竟,这是制表符的工作原理,并且仅仅因为您选择不使用TabHost / TabActivity而是推出自己的Tab-esque系统,设计方法应该是相同的。


如上所述,“singleTask”或“singleInstance”活动中不会有多个实例,因此该实例预计会处理所有新的意图。

这意味着您设置了“singleTask”或“singleInstance”的一个活动实例。 如果您有两项设置,那就意味着您只有两个实例。 只要你明白自己在做什么,就可以根据自己的喜好进行尽可能多的活动。


您试图以简单的方式解决您的问题,但是当用户更改方向并重新启动活动时该怎么办? 这不会消除表格吗? 尝试一下。 我认为你需要考虑保存包中表单的状态。 使用Android时,您的活动需要假定他们可以随时重新启动。 见下文SO帖子:

使用保存实例状态保存Android活动状态

链接地址: http://www.djcxy.com/p/90797.html

上一篇: launchModes, singleTask: how to switch between "screens"? Is Intents the only way, and if so I think I have a problem

下一篇: Linear Regression with positive coefficients in Python