我不知道如何管理對話框而不使用configChanges來指定要手動處理方向更改。 因此,可以說,你有這樣的AndroidManifest:爲什麼不會在onDestroy或onPause中解僱Dialog,removeDialog或dialog.dismiss工作?
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testandroid"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
藉此MainActivity.java:
package com.example.testandroid;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
public class MainActivity extends Activity {
private final static String TAG = "MainActivity";
Dialog mDialog = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
setContentView(R.layout.activity_main);
}
public void doShowDialog(View b) {
Log.d(TAG, "doShowDialog");
showDialog(1);
}
private void tryDismiss() {
Log.d(TAG, "tryDismiss");
try {
dismissDialog(1);
removeDialog(1);
mDialog.dismiss();
} catch(IllegalArgumentException ex) {
Log.e(TAG, ex.getMessage());
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
protected void onPause() {
tryDismiss();
super.onPause();
Log.d(TAG, "onPause");
}
@Override
protected Dialog onCreateDialog(int dialog) {
Builder b = new AlertDialog.Builder(this);
b.setTitle("Hello").setMessage("Waiting..");
mDialog = b.create();
return mDialog;
}
}
和這個佈局(main.xml中)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Open Dialog"
android:onClick="doShowDialog"
/>
</LinearLayout>
它似乎沒有不重要的是,如果您從onDestroy或onPause調用,對話框將在方向切換後顯示備份。但爲什麼?我告訴它走開。如果調用removeDialog/dismissDialog,則在方向更改之前調用它時不執行任何操作。我無法弄清楚爲什麼會這樣。擺脫的唯一途徑這是我所知道的是處理方向通過
android:configChanges="keyboardHidden|orientation"
我知道工作的新方法是使用FragmentDialog東西,我還沒有升級到尚未改變自己和我不準備重寫我的整個應用程序。看起來很奇怪,這不起作用。
這只是我在我的應用程序中的用戶可以從遠程服務器請求某些數據(以更新微調器的數據)的實際問題的示例,並且如果它們切換方向,則加載對話框將永遠不會消失,除了使用android:configChanges選項處理方向更改之外,似乎還沒有解決此問題的方法。我可以做,但我必須這樣做似乎很荒謬。
- 更新 - 刪除了按鈕以關閉對話框,因爲它沒有必要,並且由於對話框位於頂部,因此無法單擊它。
要重現剛剛啓動的應用程序,請單擊打開對話框的按鈕,然後旋轉手機。
請清楚地瞭解你的重現步驟。你加載它的肖像。點擊按鈕顯示對話框,然後點擊停止對話框,然後切換到橫向並顯示出來? – 2012-07-06 20:03:16
沒有看到您將參數分配給doDismiss(l)的位置?你是如何初始化的?這個價值是什麼? – 2012-07-06 20:05:13
您是否設置了斷點以確定這些方法正在被調用?檢查參數是否真的與您創建的對話框匹配。 – 2012-07-06 20:06:42