0

我的應用程序有很多對話框。當我改變設備的方向時,對話框隨着輸入的內容一起消失,因爲在方向改變時會觸發活動重啓。我有兩個選擇:將每個對話框的內容保存在變量中,當活動重新啓動時,我重新打開已打開並重新填充的對話框。這創建了大量的樣板代碼,並且在許多對話框中也會引起混淆。我的另一個解決方案是在清單文件中使用android:configChanges="orientation",這將阻止活動重新啓動。 (我的佈局在不同的方向上沒有改變,所以沒關係)但是很多人認爲這是一個不好的做法,因爲它阻止了其他配置更改重新啓動活動。僅在方向更改時重新啓動活動

有沒有一種方法可以防止僅在方向更改時重新啓動活動並將其保留在其他配置更改上?

+0

https://developer.android.com/guide/topics/manifest/activity-element.html#config它可以幫助你做出決定 –

+0

你想讓你的應用程序在「風景」和「肖像'模式?如果不是,則可以在清單中的每個活動標記上設置android:screenOrientation ='landscape'',然後完成。 –

回答

1

configChanges文檔:
指定活動將自行處理的一個或多個配置更改。如果未指定,則在系統中發生任何配置更改時,活動將重新啓動。

因此,如果您設置了android:configChanges="orientation|screenSize",它應該不會影響其他配置更改,除了方向。

+0

文檔說我應該設置'android:configChanges =「orientation | screenSize」'會影響除了方向之外的任何事情嗎? –

+0

你說得對,'screenSize'也應該被添加,因爲當設備在縱向和橫向之間切換時它也會改變。 (更新了我的答案)。這不會影響其他任何東西。 – dzikovskyy

+0

我的工具欄項目用於調整可用空間,但現在他們沒有。我如何重新創建操作欄以便更新? –

1

您可以使用configChanges旋轉後回,這不是一個壞習慣,而是按照要求使用它。檢查this SO貼子。

+0

這個答案表明添加這可能會阻止應用程序正確重新啓動。這是與方向| screenSize參數的情況? –

1

如果你不是okey與上面的答案似乎不適合你。您可以創建一個經理想DialogManager

公共類DialogManager {

private AlertDialog mAlertDialog; 

public void setAlertDialog(AlertDialog alertDialog) { 
    mAlertDialog = alertDialog; 
} 

public AlertDialog getAlertDialog() { 
    return mAlertDialog; 
} 

}

,並在應用程序類實例被創建

公共類SampleApplication擴展應用{

private DialogManager mDialogManager; 
private static SampleApplication mSampleApplication; 

public SampleApplication() { 
    super(); 
    mSampleApplication = this; 
} 
@Override 
public void onCreate() { 
    super.onCreate(); 
    mDialogManager = new DialogManager(); 
} 

public DialogManager getDialogManager() { 
    return mDialogManager; 
} 

public static SampleApplication getApplication() { 
    return mSampleApplication; 
} 

}

因此,無論何時您更改屏幕方向,您都可以在DialogManager中設置對話框實例,因爲應用程序僅創建實例一次。

請讓我知道,如果這些解決方案不適合你。

相關問題