2010-08-13 61 views
0

我的第一個活動是其的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將會出現,除非已創建用戶名和密碼,否則我不想顯示活動1。

它剛剛發生在我身上 - 如果我可以用對話框替換活動2,它可能會使事情變得更簡單。對話框視圖需要有2個EditTexts和2個按鈕。我可以創建這樣的東西並使用showDialog方法嗎?任何其他想法?

+0

相似的問題:http://stackoverflow.com/questions/1002085/android-webview-handling-orientation-changes – eldarerathis 2010-08-13 15:17:26

回答

0

您可以再補充:

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

到活動中您的清單。這將防止活動在屏幕旋轉中被破壞。

請注意,您仍然必須在onPause方法中保存活動的狀態。只要測試在登錄時用戶登錄或接聽電話時按Home按鈕會發生什麼情況。這應該會將您的Activity從內存中刪除,並且可能會出現更多問題。

+0

感謝您的答覆。我會試一試,讓你知道它是怎麼回事。 – user418775 2010-08-13 20:56:39

+0

您的建議奏效,謝謝。我嘗試了一些測試(來電,後退按鈕,主頁按鈕),到目前爲止我還沒有看到任何負面影響。謝謝。 – user418775 2010-08-13 22:50:13