【问题标题】:issue with program flow when rotating device with two activities旋转具有两个活动的设备时出现程序流程问题
【发布时间】:2010-08-13 23:48:05
【问题描述】:

我的第一个活动是在其 onCreate 中创建第二个活动:

if (userName == null || password == null) {
    if (!getUserNameAndPassword() ) {
        // User is launching this for the first time
        Intent explicitIntent = new  Intent(CreateSessionAlert.this,CreateUserNameAndPassword.class);<br>
        startActivityForResult(explicitIntent,GET_USER_NAME_AND_PASSWORD);
    }
}

第二个活动具有用户名和密码的 EditText 视图以及提交和取消按钮。当按下任一按钮时,来自用户名和密码的文本将被发送回活动一(通过 onActivityResult),该活动连接到服务器以查看用户名是否可用。连接到服务器时,showDialog 用于显示 ProgressDialog。当服务器响应时,ProgressDialog 被关闭并显示一个 AlertDialog。只要设备不旋转,它就可以正常工作。

问题是:如果用户从第二个活动中旋转设备并推送提交,第一个活动会重新调用其 onCreate,由于用户名和密码仍然为空,因此最终会再次启动第二个活动。

有没有人有任何建议来解决这个问题?

是否有一种方法可用于将数据从活动 2 传递到活动 1 的 onCreate?在这种情况下,我不想使用数据库,因为这似乎有点矫枉过正。

我曾考虑将服务器通信和对话包含在活动 2 中,但是我会在活动 1 和活动 2 中有重复的服务器代码(活动 1 也连接到服务器以进行其他操作)。我使用这种方法遇到的另一个问题是用户可以选择取消创建密码,在这种情况下我希望应用程序完成。如果我从活动 2 中调用完成,则会出现活动 1,除​​非创建了用户名和密码,否则我不希望它显示。

我突然想到 - 如果我可以用对话框替换活动 2,它可能会使事情变得更简单。对话框视图需要有 2 个 EditTexts 和 2 个按钮。我可以创建这样的东西并使用 showDialog 方法吗?还有其他想法吗?

【问题讨论】:

标签: android android-lifecycle


【解决方案1】:

你可以添加:

<activity android:name="..."
      android:label="@string/appName"
      android:configChanges="keyboardHidden|orientation" />

到清单中的活动。这将防止活动在屏幕旋转时被破坏。

请注意,您仍然必须在 onPause 方法中保存活动的状态。只需测试如果您在用户登录时按下主页按钮或在登录期间接听电话会发生什么情况。这应该会从内存中删除您的 Activity,并且可能会出现更多问题。

【讨论】:

  • 感谢您的回复。我会试一试,然后告诉你进展如何。
  • 您的建议有效,谢谢。我尝试了一些测试(来电、返回按钮、主页按钮),到目前为止我还没有看到任何负面影响。谢谢。
猜你喜欢
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多