2011-06-17 32 views
15

我試圖強制PreferenceActivity刷新。有誰知道如何做到這一點?使用PreferenceActivity時首選項的清爽視圖

我有一個ResetDefaultsPreference類的子類Preference和,點擊後,應該重新設置爲默認所有的喜好,它的鍵啓動具有一定的前綴。它可以工作,但是當我點擊重置首選項時,該屏幕中的所有首選項都不會更新,直到我退出屏幕並返回。(適用於某些自定義顏色首選項,但即使這樣也不適用於某些ListPreference s - 對於那些我不得不離開並重新輸入PreferenceActivity本身的更新值來顯示。)

我試圖通過獲取根視圖和invalidate()來解決這個問題,但似乎沒有工作。這是刷新顯示的行。這是Preference子類的一部分,它保留Context它在mContext中創建。

((Activity)mContext).findViewById(android.R.id.content).invalidate(); 

在首選項值被更改並提交後會發生這種情況。 (值改變,但顯示不。)有誰知道我可以如何強制PreferenceActivity刷新自己?

+0

該類的完整源代碼,對於那些感興趣的,可以在這裏找到(http://pastebin.com/ZHmSThUH)。 – tmandry 2011-06-19 01:16:49

+1

我發現了一個部分工作的黑客:在重置默認值後,調用'setSummary(getSummary()+「));'或者'Preference'中的某個特性來更改首選項的摘要,這會導致視圖刷新。這適用於自定義顏色首選項,但不__更新「ListPreference」對話框中的值。 – tmandry 2011-06-21 05:13:06

+0

您是否嘗試過'Preference'的'notifyChanged()'和'notifyHierarchyChanged()'? – Stan 2013-11-07 18:11:12

回答

13

我不知道「刷新」PreferenceActivity的方法,但可以爲用戶創建幻覺。它將關閉並重新打開沒有動畫的活動,因此它看起來好像只是數值發生了變化。

Intent intent = getIntent(); 
overridePendingTransition(0, 0); 
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
finish(); 
overridePendingTransition(0, 0); 
startActivity(intent); 
+0

正是我在找的東西。非常感謝你! – Sobo 2012-11-10 00:22:51

+0

一個很好的解決方案,謝謝! – tristan2468 2014-08-18 17:45:38