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