プログラムでPreferenceCategoryを削除する必要があります。次のコードで個々の設定を削除できますが、PreferenceCategory全体も削除(無効化)する必要があります。
PreferenceScreen preferenceScreen = getPreferenceScreen();
EditTextPreference etp = (EditTextPreference) preferenceScreen.findPreference("pref22");
((PreferenceGroup) findPreference("prefcat")).removePreference(etp);
編集: PreferenceCategory "prefcat"と子プリファレンス "pref22"の作業コードは次のとおりです。
PreferenceScreen preferenceScreen = getPreferenceScreen();
EditTextPreference etp = (EditTextPreference) preferenceScreen.findPreference("pref22");
PreferenceGroup preferenceGroup = (PreferenceGroup) findPreference("prefcat");
if (preferenceGroup != null) {
preferenceGroup.removePreference(etp);
preferenceScreen.removePreference(preferenceGroup);
}
最初にPreferenceCategory
をロードしないでください。
Javaで設定を定義している場合は、PreferenceCategory
を作成しないでください。
設定をXMLで定義する場合は、3つのXMLファイルを使用します。
カテゴリが必要な状況では、3つのXMLファイルすべてをロードします。カテゴリが不要な場合は、最初と3番目のXMLファイルのみをロードします。
PreferenceScreen
への参照を取得して、カテゴリを非表示にすることができます。
私はあなたのxml:
<PreferenceScreen
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:key="@string/preferenceScreen">
//set all you values
//Preference, PreferenceCategory and/or CheckBoxPreference
</PreferenceScreen>
あなたのstring.xml:この新しい文字列を設定することを忘れないでください
<string name="preferenceScreen" translatable="false">preferenceScreen</string>
あなたのコードで:
preferenceScreen = (PreferenceScreen) findPreference(getResources().getString(R.string.preferenceScreen));
次に、PreferenceScreenからカテゴリを削除します。
myCategory = (PreferenceCategory) findPreference(getResources().getString(R.string.my_category));
myPreferenceScreen.removePreference(myCategory);
XMLでPreferenceScreenとPreferenceCategoryのキーを提供します。
<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:key="preferenceScreen" >
<PreferenceCategory
Android:summary="@string/settings_billing_summary"
Android:title="Title"
Android:key="myPrefCat" >
<Preference
Android:key="someKey"
Android:summary="Sum"
Android:title="Title" />
</PreferenceCategory>
</PreferenceScreen>
クラスから、preferenceScreenとpreferenceCategoryを参照し、removePreference()メソッドを使用して画面から設定を削除できます。
PreferenceScreen preferenceScreen = (PreferenceScreen) findPreference("preferenceScreen");
PreferenceCategory myPrefCat = (PreferenceCategory) findPreference("myPrefCat");
preferenceScreen.removePreference(myPrefCat);
この回答は douarbouの回答 に基づいています。これは古くなっているように見えますが、基本的には同じです。
親のIDを使用せずに、すべての設定を走査して、希望する設定の親がどれであるかを確認することで、子親ツリー全体を見つけることができます。
public static Map<Preference,PreferenceGroup> buildPreferenceParentTree(final PreferenceActivity activity)
{
final Map<Preference,PreferenceGroup> result=new HashMap<Preference,PreferenceGroup>();
final Stack<PreferenceGroup> curParents=new Stack<PreferenceGroup>();
curParents.add(activity.getPreferenceScreen());
while(!curParents.isEmpty())
{
final PreferenceGroup parent=curParents.pop();
final int childCount=parent.getPreferenceCount();
for(int i=0;i<childCount;++i)
{
final Preference child=parent.getPreference(i);
result.put(child,parent);
if(child instanceof PreferenceGroup)
curParents.Push((PreferenceGroup)child);
}
}
return result;
}
使用例:
final Map<Preference,PreferenceGroup> preferenceParentTree=buildPreferenceParentTree(SettingsActivity.this);
final PreferenceGroup preferenceGroup=preferenceParentTree.get(preferenceToRemove);
preferenceGroup.removePreference(preferenceToRemove);
編集:これのための新しいAPIがあるようです:
https://developer.Android.com/reference/androidx/preference/Preference#setVisible(boolean)
現在利用できるかどうかはわかりませんが。