Извините за странный заголовок.
Я хочу программно добавить PreferenceCategory
к одному из моих PreferenceScreens
, которые уже существуют в этом файле (обрезанная версия моего preferences.xml
):
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Monitored Zones -->
<PreferenceScreen
android:key="pref_ps_mz"
android:title="Zones surveillées"
android:summary="Pour gérer vos zones surveillées"
android:icon="@drawable/ic_pref_mz">
<SwitchPreference
android:key="pref_mz_sw_mzDisplayFilter"
android:title="Afficher"
android:summary="Les zones surveillées seront affichées en rouge sur votre carte"
android:defaultValue="true" />
<PreferenceScreen
android:key="pref_mz_removeAll"
android:title="Toutes les supprimer"
android:summary="Pour supprimer toutes vos Zones Surveillées" />
</PreferenceScreen>
<!-- Notifications -->
<PreferenceScreen
android:key="pref_ps_notif"
android:title="Notifications"
android:summary="Les notifications vous sont envoyées par notre serveur selon vos préférences"
android:icon="@drawable/ic_pref_notifs">
<SwitchPreference
android:key="pref_notif_sw_mirrorAlertFilters"
android:title="Appliquer mes filtres d'alertes"
android:summary="Pour ne recevoir des notifications qu'en lien avec les alertes que vous affichez sur la carte (ces préférences se retrouvent dans la catégorie « Filtres d'alertes »)"
android:defaultValue="false"/>
</PreferenceScreen>
</PreferenceScreen>
В частности, PreferenceScreen
с android:key="pref_ps_mz"
- это то, к которому я хотел бы добавить PreferenceCategory
. Это PreferenceCategory
должно появиться после android:key="pref_mz_removeAll"
, и я должен иметь возможность программно заполнять его PreferenceScreen
Объектами, основываясь на количестве объектов, доступных для отдельного удаления. Я предполагаю, что как только это будет сделано, я легко смогу добавить «onClickListeners» к каждому из этих PreferenceScreen
объектов.
Вот мой (обрезанный) SettingsPrefFragment.java
файл:
public class SettingsPrefFragment extends PreferenceFragment {
private SharedPreferences sharedPref;
public SettingsPrefFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity());
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
/*
Keys hierarchy:
pref_ps_mz
pref_mz_sw_mzDisplayFilter
pref_mz_removeAll
pref_ps_notif
pref_notif_sw_mirrorAlertFilters
pref_notif_sw_noise
pref_notif_sw_block
*/
/*
Monitored Zones
*/
Preference mzPref = findPreference("pref_ps_mz");
mzPref.setEnabled(false);
// Enabling access only if authenticated
if(user != null) {
mzPref.setEnabled(true);
}
// Managing monitored zones
findPreference("pref_mz_sw_mzDisplayFilter").setOnPreferenceClickListener(preference -> {
PinController.PinPreferences.showMonitoredZones = sharedPref.getBoolean("pref_mz_sw_mzDisplayFilter", true);
return true;
});
// TODO: DISABLE if the user has 0 MZ
// Removing all MonitoredZones
findPreference("pref_mz_removeAll").setOnPreferenceClickListener(preference -> {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
alertDialogBuilder.setMessage("Voulez-vous vraiment effacer toutes vos Zones Surveillées?");
alertDialogBuilder.setNegativeButton("Annuler", (dialog, which) -> dialog.cancel()); // rien faire
alertDialogBuilder.setPositiveButton("Oui", (arg0, arg1) -> {
MainActivity.myMapDisplay.getZoneController().clearAllZones(user);
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
return true;
});
// TODO: Programmatically populate a PreferenceCategory with MonitoredZonesWrapper's MonitoredZones
/*
Notifications
*/
Preference notifPref = findPreference("pref_ps_notif");
notifPref.setEnabled(false);
// Enabling access only if authenticated
if(user != null) {
notifPref.setEnabled(true);
}
}
}
Я пробовал это решение (добавлено к onCreate()
фрагмента), но его недостаточно, и я не мог понять, как его использовать, чтобы делать, как я хочу:
PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(getActivity());
PreferenceCategory category = new PreferenceCategory(getActivity());
category.setTitle("category name");
screen.addPreference(category);
CheckBoxPreference checkBoxPref = new CheckBoxPreference(getActivity());
checkBoxPref.setTitle("title");
checkBoxPref.setSummary("summary");
checkBoxPref.setChecked(true);
category.addPreference(checkBoxPref);
setPreferenceScreen(screen);
addPreferencesFromResource(R.xml.preferences);
Можно добавить только PreferenceCategory
в самом верху корня PreferenceScreen
. Мне нужно иметь возможность заполнять нижнюю часть вспомогательного экрана.
Заранее большое спасибо!