旋转具有两个活动的设备时的程序流问题

时间:2010-08-13 15:05:55

标签: android android-lifecycle

我的第一个活动是在其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,由于用户名和密码仍然为空,最终会再次启动第二个活动。

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

是否有一种方法可用于将数据从activity-2传递给activity-1的onCreate?在这种情况下我不想使用数据库,因为这看起来有点过分。

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

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

1 个答案:

答案 0 :(得分:0)

你可以添加:

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

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

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