146

PreferenceActivity を拡張するアクティビティがあります。xml ファイルから設定を読み込んでいます。しかし、場合によっては、アプリの状態に基づいて画面から設定の 1 つを完全に非表示にする必要があります。setEnabled メソッドがありますが、それはまさに私が望むものではありません。その設定を画面から完全に削除したい。出来ますか ?

4

15 に答える 15

219

Preference内にある場合PreferenceCategoryは、これを行う必要があります。

XML:

<PreferenceCategory
    android:key="category_foo"
    android:title="foo">

    <CheckBoxPreference
        android:key="checkPref" />

ジャワ:

CheckBoxPreference mCheckBoxPref = (CheckBoxPreference) findPreference("checkPref");
PreferenceCategory mCategory = (PreferenceCategory) findPreference("category_foo");
mCategory.removePreference(mCheckBoxPref);
于 2011-04-18T15:18:01.080 に答える
177

はい、Preferenceとその親 ( PreferenceCategory、またはPreferenceScreen)の両方への参照がある場合

myPreferenceScreen.removePreference(myPreference);
于 2010-02-10T21:07:56.397 に答える
54

Preference が設定画面の直接の子である場合、以下にいくつかのスタンドアロン コードを示します。

PreferenceScreen screen = getPreferenceScreen();
Preference pref = getPreferenceManager().findPreference("mypreference");
screen.removePreference(pref);
于 2013-09-17T16:43:37.637 に答える
9

たとえば、SwitchPreference で設定を動的に変更するものが必要な場合は、すべてのサブ オプションを 2 つのカテゴリ コンテナーに入れるのが最善の方法であることがわかりました。最初にすべてが表示されます。次に、不要なビットを削除します。賢い点は、何かが変更されたときに再作成をトリガーするだけで、手動で何かを作成したり、正しい順序に戻すことを心配したりする必要がないことです。

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();
    }
}

これで見られる唯一の欠点は、画面が最初から再作成されるため、フラッシュがあることです.

于 2015-02-16T04:27:03.457 に答える
0

評価したい場合、そのマスクに基づいて、代替手段があるかもしれません

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);
}

これはすべて内にある必要があります

public static class PrefsFragment extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
于 2016-05-12T23:38:16.753 に答える