La nueva insistencia en fragmentos en lugar de actividades parece hacer esto más difícil. La ruta invalidate
no pareció funcionar ni se acerca utilizando la Vista subyacente. Gracias a la respuesta de halxinate ahora he logrado trabajar en esto. Para las personas que son tan nuevos como yo de todo esto que aquí están algunos detalles más:
Al crear el fragmento de configuración, guardar una referencia en su actividad principal, por ejemplo:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case R.id.action_preferences:
if (getFragmentManager().getBackStackEntryCount() < 1) {
FragmentTransaction trans = getFragmentManager()
.beginTransaction();
// Save a reference to the settings fragment
settingsFrag = new SettingsFragment();
trans.replace(R.id.container, settingsFrag);
trans.addToBackStack(null);
trans.commit();
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Entonces, cuando usted quiere para actualizar los resúmenes del PreferenceScreen
externo desde el OnSharedPreferenceChangeListener
use este tipo de cosas. Tenga en cuenta que es necesario haber definido una clave en su preferencia xml fragmento para el exterior PreferenceScreen
(en este caso android:key="prefs_root"
):
public static void setOuterSummaries(SettingsFragment sf) {
// Set the outer preferences summaries
if (sf == null)
return;
//Code to update the summaries....
// Force the parent screen summaries to update
prefScr = (PreferenceScreen) sf.findPreference("prefs_root");
if (prefScr != null)
((BaseAdapter) prefScr.getRootAdapter()).notifyDataSetChanged();
}
OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs,
String key) {
Log.e("L", "Change");
setOuterSummaries(settingsFrag);
}
};
Tenga en cuenta que usted podría ahorrar una referencia a la BaseAdapter
en lugar de al fragmento de configuración pero esto el enfoque parece más seguro cuando se piensa en generalizarlo a una situación o código de múltiples fragmentos que crea dinámicamente el contenido del fragmento.
Una cosa a tener en cuenta, que si la preferencia de interés es en sí 'CheckBoxPreference' (u otro' TwoStatePreference', como 'SwitchPreference'), entonces' setSummary' doesn No funciona si se ha asignado 'android: summaryOn' o' android: summaryOff'. Uno debería usar 'setSummaryOn' y' setSummaryOff' en tal caso, lo cual no es obvio. – Stan