2011-10-19 87 views
1

我構建了一個首選項xml,我將其用作兩個不同活動頁面中的資源。在一個首選項頁面隱藏首選項按鈕

唯一的問題是我不希望LOGOUT按鈕顯示在這兩個頁面之一中(因爲用戶尚未連接)。

我現在所做的是:

logoutButton = (Preference)getPreferenceScreen().findPreference("logout"); 
logoutButton.setEnabled(false); 

按鈕現在以灰色顯示出來..但有沒有辦法不讓它顯示在所有?

謝謝!

+0

你有喜歡的類別內嗎? – Carnal

+0

我的解決方案有效嗎?這應該。 – Carnal

回答

10

如果註銷按鈕(偏好)是在PreferenceScreen,這樣做:

PreferenceScreen screen = getPreferenceScreen(); 
Preference logout = findPreference("logout"); 
screen.removePreference(logout); 

不然,如果你的註銷按鈕(偏好)是在PreferenceCategory(這是一個PreferenceScreen內),這樣做:

PreferenceCategory category = (PreferenceCategory) findPreference("category_name"); 
Preference logout = findPrefence("logout"); 
category.removePreference(logout); 
+1

這對我來說很好,我有一個任務顯示偏好或不在類別取決於系統區域設置。來自@ mik3y的解決方案不起作用,因爲首選項不在層次結構的根目錄中,而是在PreferenceCategory中。這是該類別中的最後一個首選項,所以我不需要擔心動態添加/刪除它時的順序。 – CrazyCoder

+0

很高興我可以幫助:) – Carnal

+0

對不起,延遲答覆(忙幾天),但感謝您的優秀解決方案很好! –

2

與視圖不同,首選項沒有setVisibility方法。相反,嘗試使用PreferenceScreen#removePreference

PreferenceScreen preferenceScreen = getPreferenceScreen(); 
logoutButton = (Preference) preferenceScreen.findPreference("logout"); 
preferenceScreen.removePreference(logoutButton); 

您可能需要保留在你的活動logoutButton參考,如果你以後想重新添加。

+0

嗯,不工作,但感謝您的幫助! –

0

把一些條件和將其添加到onCreate方法例如

if(something){ 
    CheckBoxPreference lp=new CheckBoxPreference(this); 
    lp.setKey("checkbox"); 
    lp.setTitle("logout"); 
    lp.setEnabled(true); 
    getPreferenceScreen().addPreference(lp); 
    } 

如果我把真實的東西放在了偏好上,否則它不會。不要把它放在代碼中的xml中