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()
调用,并使用ViewFlipper
或FrameLayout
或其他来改变你的内容来匹配按钮。 毕竟,这是制表符的工作原理,并且仅仅因为您选择不使用TabHost
/ TabActivity
而是推出自己的Tab-esque系统,设计方法应该是相同的。
如上所述,“singleTask”或“singleInstance”活动中不会有多个实例,因此该实例预计会处理所有新的意图。
这意味着您设置了“singleTask”或“singleInstance”的一个活动实例。 如果您有两项设置,那就意味着您只有两个实例。 只要你明白自己在做什么,就可以根据自己的喜好进行尽可能多的活动。
您试图以简单的方式解决您的问题,但是当用户更改方向并重新启动活动时该怎么办? 这不会消除表格吗? 尝试一下。 我认为你需要考虑保存包中表单的状态。 使用Android时,您的活动需要假定他们可以随时重新启动。 见下文SO帖子:
使用保存实例状态保存Android活动状态
链接地址: http://www.djcxy.com/p/90797.html