2010-06-07 176 views
0

我有一個RelativeLayout的一個Android的活動,我已實現了以下方法,以防止從方位的變化而重新創建活動:如何在不重新啓動Activity的情況下刷新Android RelativeLayout?

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

} 

我顯然不會在這個方法中做什麼,但它的工作完美當使用LinearLayout時。然而,現在使用RelativeLayout時,我的佈局在改變到橫向時都會搞亂。

如果沒有通過調用onCreate重新啓動活動,屏幕正確重畫的最有效方法是什麼?

+0

也許如果您發佈引起該問題的佈局文件,我們可以提供更好的答案? – Janusz 2010-06-08 12:09:00

回答

2

有兩種方式:

  • 保留對象在更改配置
  • 處理配置改變自己

您選擇了第二種方式。在這種情況下,您必須手動重新分配每個資源,不建議使用此方法。恕我直言,最好的方法是通過實施方法:onRetainNonConfigurationInstance();

Here如何使用的完整示例。

注:的onCreate將會再次調用,但你可以調整你的代碼,以防止長期捉迷藏任務將配置更改

+0

感謝您的建議。我讀過你引用的例子。因此,它看起來像使用onRetainNonConfigurationInstance()實際上殺死活動並重新啓動它,但提供了一種方法來緩存加載的任何數據。這很好,但你仍然需要承擔重新開始活動和重新加載所有視圖的成本......但我想這只是它必須完成的方式:)所以,如果使用onRetainNonConfigurationInstance()我想我不應該將我的活動設置爲:android:configChanges =「keyboardHidden | orientation」。我需要做的是實現該方法? – JohnRock 2010-06-08 11:49:14

+0

您提到使用選項1我必須「手動重新分配每個資源」。重新分配每個資源,然後我把它意味着調用方法,如'TextView myView = findViewById(R.id.myTextView); myView.setText(「some content」)'爲所有顯示的資源? – JohnRock 2010-06-08 11:55:18

+0

「我想我不應該把我的活動設置爲:android:configChanges =」keyboardHidden | orientation「 是的! 對於第二個評論,我的意思是:如果您通過覆蓋onConfigurationChanged爲橫向和縱向模式提供備選可繪製資源,則必須手動分配這些替代資源。您可以從最新的newConfig參數中選擇合適的角色。 對於RelativeLayout問題,您是否嘗試使其無效? – 2010-06-08 12:28:56

2

有是在Francescos答案缺少一個第三和更簡單的方法中再次調用。

只需添加

android:configChanges="keyboardHidden|orientation" 

到你不想重新啓動從橫向到縱向模式的改變每一個活動的活動標籤。這將導致操作系統在重建之前重建您的佈局而不破壞它。 oncreate方法不會再被調用,並且不會失去活動的狀態。但要小心,只有在縱向和橫向模式下使用相同的佈局文件時,這纔會起作用。

請參閱本question更多信息,關於這個主題

+0

在根據官方文檔中,添加 android:configChanges =「keyboardHidden | orientation」只是聲明一個 活動,它將自行處理配置更改。所以恕我直言,它看起來像 只是我的第二個選項 – 2010-06-07 11:04:44

+0

的另一個偏角是的,如果你聲明這一點並覆蓋onConfigurationChanged,你有你的第二個解決方案是正確的抱歉 – Janusz 2010-06-07 12:22:37

+0

第三種方法實際上就是我在我的例子中的方式。問題在於它成功地重繪了LinearLayout的佈局,但不是爲RelativeLayout重繪 - 至少不是在Nexus 1上。 – JohnRock 2010-06-08 12:01:32

相關問題