我有一個擴展PreferenceActivity的活動。 我正在從xml文件加載首選項。 但在某些情況下,我需要根據我的應用程序狀態完全隱藏屏幕上的某個偏好設置。有一個setEnabled方法,但它不完全是我想要的。我想從屏幕上完全刪除該偏好。 這可能嗎?刪除/隱藏屏幕上的偏好
回答
如果您Preference
是PreferenceCategory
內,你必須這樣做:
XML:
<PreferenceCategory
android:key="category_foo"
android:title="foo">
<CheckBoxPreference
android:key="checkPref" />
的Java:
CheckBoxPreference mCheckBoxPref = (CheckBoxPreference) findPreference("checkPref");
PreferenceCategory mCategory = (PreferenceCategory) findPreference("category_foo");
mCategory.removePreference(mCheckBoxPref);
公平地說,上面的答案確實表明你需要父類'PreferenceCategory'。 – matt 2014-06-06 00:09:28
如喜好是個人偏好屏幕的直接子的情況下,這裏是一些獨立的代碼:
PreferenceScreen screen = getPreferenceScreen();
Preference pref = getPreferenceManager().findPreference("mypreference");
screen.removePreference(pref);
如果首選項位於類別內,則無法使用。您必須爲該類別設置'findPreference',並從類別 – MBH 2017-09-10 14:34:53
@MBH中刪除偏好:感謝您提及該警告! – 2017-09-11 03:49:35
如果你想要的東西,會動態改變首選項例如在SwitchPreference ,我發現最好的方法是將我所有的子選項放入兩個類別容器中。最初你會看到所有的東西,然後你只刪除你不想要的東西。聰明的一點是,當事情發生變化時,您只需觸發重新創建,然後您就不必手動創建任何內容或擔心按照正確的順序重新排列。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
PreferenceCategory prefCatOne= (PreferenceCategory)findPreference("prefCatOne");
PreferenceCategory prefCatTwo= (PreferenceCategory)findPreference("prefCatTwo");
SwitchPreference mySwitchPref= (SwitchPreference)findPreference("mySwitchPref");
PreferenceScreen screen = getPreferenceScreen();
if (mySwitchPref.isChecked()) {
screen.removePreference(prefCatOne);
} else {
screen.removePreference(prefCatTwo);
}
}
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals("mySwitchPref")) {
this.recreate();
}
}
我可以看到的唯一缺點就是屏幕是從頭開始重新創建的。
如果要評估,並基於該面膜,另一種可能是/(SI deseas evaluar,Y帶基地ESO ocultar,UNA alternativa puede SER):
SwitchPreference autenticacionUsuario = (SwitchPreference) findPreference("key_autenticacion_usuario");
final EditTextPreference Username = (EditTextPreference) findPreference("key_username_mqtt");
final EditTextPreference Password = (EditTextPreference) findPreference("key_password_mqtt");
if (!autenticacionUsuario.isChecked()) {
PreferenceCategory preferenceCategory = (PreferenceCategory) findPreference("category_mqtt");
preferenceCategory.removePreference(Username);
preferenceCategory.removePreference(Password);
}
這一切都必須是內/(待辦事項ESTO德貝IR迪登特魯):
公共靜態類PrefsFragment擴展PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
對不起,但這是一個英文網站。你能用英語回答嗎? – 2016-05-13 00:04:56
當然我的意圖也是爲那些不會說英語的人提供 – 2016-05-13 14:05:06
@GustavoEduardoBelduma,那麼你可能需要閱讀這個http://meta.stackoverflow.com/a/297680/545026 – 2016-07-28 19:33:29
下面是做到這一點的通用方式,作品不論是否偏好是在PreferenceCategory
或PreferenceScreen
之下。
private void removePreference(Preference preference) {
PreferenceGroup parent = getParent(getPreferenceScreen(), preference);
if (parent == null)
throw new RuntimeException("Couldn't find preference");
parent.removePreference(preference);
}
private PreferenceGroup getParent(PreferenceGroup groupToSearchIn, Preference preference) {
for (int i = 0; i < groupToSearchIn.getPreferenceCount(); ++i) {
Preference child = groupToSearchIn.getPreference(i);
if (child == preference)
return groupToSearchIn;
if (child instanceof PreferenceGroup) {
PreferenceGroup childGroup = (PreferenceGroup)child;
PreferenceGroup result = getParent(childGroup, preference);
if (result != null)
return result;
}
}
return null;
}
我建議使用V7偏愛,它具有調用setVisible()方法。但我還沒有嘗試過。因此,你必須使用PreferenceFragment代替PreferenceActivity https://developer.android.google.cn/reference/android/support/v7/preference/Preference.html#setVisible(boolean)
在XML文件中:
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:key="preferenceScreen">
<PreferenceCategory
android:key="personalisation"
android:title="your title here">
<ThemedPreference
android:key="animation" />
</PreferenceScreen>
在您的代碼:
PreferenceScreen pPreferenceScreen = (PreferenceScreen) findPreference("preferenceScreen");
PreferenceCategory pCategory = (PreferenceCategory) findPreference("personalisation");
ThemedPreference pThemePref = (ThemedPreference) findPreference("animation");
pPreferenceScreen.removePreference(pCategory); //remove category
pCategory.removePreference(pThemePref); // remove preference
- 1. Android偏好屏幕偏好設置
- 2. 我的偏好屏幕上的滑塊
- 3. 如何從屏幕中刪除Android偏好設置
- 4. 如何隱藏屏幕上的補丁
- 5. 在屏幕鍵盤上隱藏內容
- 6. 在小屏幕上隱藏TextView
- 7. 在響應式屏幕上隱藏div
- 8. 在屏幕上隱藏div ID
- 9. 隱藏SlidingDrawer在屏幕上點擊
- 10. Android的偏好屏幕布局
- 11. 隱藏屏幕睡眠
- 12. jquery屏幕隱藏/顯示
- 13. 隱藏Phonegap spash屏幕
- 14. 隱藏屏幕SVG元素
- 15. Bootstrap 4 - 隱藏課程 - 只隱藏在小屏幕上
- 16. 躲在偏好屏幕(機器人)
- 17. 解決xml偏好屏幕問題
- 18. 偏好屏幕顯示文本塊
- 19. 在plone用戶偏好中隱藏「個人偏好選項卡」
- 20. 從屏幕上刪除打印的行
- 21. 刪除屏幕上的多邊形(OpenGL)?
- 22. 如何從SugarCRM中的登錄屏幕中刪除或隱藏全局鏈接?
- 23. 屏幕閱讀器的隱藏目錄
- 24. 隱藏屏幕底部的div嗎?
- 25. 隱藏預載屏幕後的內容
- 26. 隱藏Excel 2010中的MS VBA屏幕
- 27. 隱藏窗口的屏幕截圖
- 28. 從屏幕上刪除精靈
- 29. 隱藏在垂直屏幕上的隱藏面板調整大小
- 30. 偏好不以編程方式顯示在子屏幕上
我很好奇這一點。 – 2010-02-10 21:05:23