2011-03-04 44 views
6

我有一個activity與其中有一個async task將做一些下載的東西。在downlaoding時它將顯示l oading dialog
我的問題是,當我在one orentiaon中這樣做時,它對我很好。但是,當我下載時rotate,它顯示window leaked,並會在我的後期執行崩潰在 dialog.cancel
從我對它的研究中,我更瞭解它,因爲change in the context當設備是rotated
那就是當devicerotated,activity將是recreated因此context將是changed
但我創建了與舊的對話框,並wasn't the current context。所以,當我取消它顯示錯誤
這是什麼解決方案,任何想法frnds。
我使用honeycomb,我嘗試過,但fragment但沒有得到一個很好的例子。我現在主要是想的是,
如果任何人都可以給我一些鏈接,這將是巨大的 加載對話框,同時旋轉設備

回答

3

首先:使用showDialog法(there are a lot of examples in the official documentation)打開對話框。如果這樣做,該活動將負責解除關於銷燬的對話,並在活動重新創建後重新顯示它。

另外...如果對話框顯示進度條(不是輪子),您將需要在方向更改後更新對話框的進度。爲此,我建議使用onRetainNonConfigurationInstance來返回對話框和/或活動本身的當前狀態。然後,您可以使用getLastNonConfigurationInstance恢復該狀態。谷歌有關這兩種方法,如果你想看到的例子。

另一件事要記住:如果你正在更新的對話框中的/或從AsyncTask任何其他UI元素的狀態,你必須意識到,活性重建之後,AsyncTask可能指向錯誤UI參考。爲了解決這個問題,您可以創建代理類(代理設計模式),從當前UI元素中分離AsyncTask進度通知。

+0

感謝** **克里斯蒂安爲你解答。我使用[ProgressDialog](http://developer.android.com/guide/topics/ui/dialogs.html#ProgressDialog),但是對於旋轉時崩潰。 – Jithin 2011-03-05 04:53:15

+0

這是什麼**代理設計模式**。它的聲音很有趣。我對此一無所知。你可以提供一些鏈接 – Jithin 2011-03-05 04:54:41

+0

看看[iosched](http://code.google.com/p/iosched/)應用程序的源代碼。它有一個如何使用'onRetainNonConfigurationInstance','getLastNonConfigurationInstance'以及代理設計模式的很好的例子。 – Cristian 2011-03-05 13:51:15

-1

發生這種情況是因爲當設備方向更改時Activity重新創建。爲了禁用這個,你可以像這樣配置Activity。

<activity .... android:configChanges="orientation|keyboard" 
... 
> 

Android: Dialog etc restore after rotation changed

+0

這不建議。見另一個答案。 – 2011-11-09 21:53:56