2011-10-19 59 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中