2015-06-15 45 views
1

我在一個片段上顯示一個對話框,當異步任務完成執行時,該對話框應該被解散。一切都很好,直到我在對話框顯示時改變方向:我得到一個窗口泄漏錯誤。我知道那是因爲活動被重新創建,並且對話框被附加到舊的。我無法在清單上使用android:configChanges="keyboardHidden|orientation|screenSize",因爲我對橫向和縱向有不同的佈局,所以我放棄了onPause()方法中的對話框,並在創建新活動時再次重新創建對話框。但現在我有一個不同的問題:我的異步任務沒有對新的對話框的引用,所以它不能解僱它...安卓對話窗口在方向變化時泄漏

我已經嘗試了與對話框片段相同的事情,但問題仍然存在。

有沒有辦法解決這個問題?

謝謝。

+0

只需使用一個包並使用onSaveInstanceState – user2511882

+0

嗨,@ user2511882。你能告訴我什麼是你建議我保存'onSaveInstanceState'方法嗎?我已經使用它來保存一個布爾值,說明是否顯示對話框... –

回答

0

我知道你說你不能使用android:configChanges="keyboardHidden|orientation|screenSize"因爲你有橫向和縱向不同的佈局,而是採取了看起來Android documentation關於處理配置改變自己

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
     setContentView(R.layout.landscapeLayout); 
     //update your view elements, if any 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
     setContentView(R.layout.portraitLayout); 
     //update your view elements, if any 
    } 
} 

這樣你可以維護您的不同佈局,並保留對您的對話框的引用

+0

嗨,@Thyen。 我更新了問題!這個問題有點混亂,因爲對話框是在一個片段中創建(和解散)的,所以我不知道這個解決方案是否有效(如果是這樣,我不知道怎麼做......)方式,還是你可以告訴我如何使用配置更改? 謝謝! –

+0

@FilipeRamos,不幸的是,我沒有足夠的經驗來使用這種方法來處理佈局。我使用清單聲明來保持我的片段活着,而不是鬆散對AsyncTask的引用。我瘋狂的猜測是在'onConfigurationTask'方法中使用'setContentView'方法,在asnwer中顯示'if'語句。我會編輯答案 –

相關問題