Ho un codice legacy che estende PreferenceActivity con una sottoclasse chiamata "Preferences". Il PreferenceActivity viene richiamato come segue:Come fare riferimento o "trovare" un'Attività di preferenza?
Intent intent = new Intent(this, Preferences.class);
this.startActivity(intent);
l'OnSharedPreferenceChangeListener esiste in un altro frammento (non la sottoclasse PreferenceActivity), ma necessita di un riferimento al PreferenceActivity per modificare gli attributi di preferenza personalizzata/controllo analogo a quanto segue:
pref = (CheckBoxPreference) prefActivity.findPreference(res.getString(R.string.keyAccount));
pref.setSummary("something");
dove "prefActivity" è il riferimento all'Attività di preferenza. Qualcuno può suggerire come salvare un riferimento a PreferenceActivity quando viene creato o altrimenti localizzare PreferenceActivity quando necessario?
MODIFICA: Includere il codice estremamente semplificato per aiutare a mostrare le gerarchie e chiarire.
FragmentActivity CPActivity consente di creare CPFragment e su richiesta (premendo un pulsante) crea un Intent per attivare una sottoclasse PreferenceActivity (denominata "Preferences").
public class CPActivity extends FragmentActivity
{
public static CPActivity inst;
private CPFragment mFragmentCP;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
inst = this;
mFragmentCP = new CPFragment();
}
public void onSettingsButtonPressed() {
// Bring up the Preferences menu
Intent intent = new Intent(this, Preferences.class);
this.startActivity(intent);
}
}
CPFragment è il nostro listener di preferenze condiviso (tra le altre cose). È in questo codice, dove vorremmo modificare un controllo/voce di preferenza personalizzato (cioè, non il valore di preferenza stesso, piuttosto attributi sul controllo di preferenza, ad esempio un CheckBoxPreference). Ci piacerebbe farlo qui perché è qui che vengono calcolati i dati pertinenti.
public class CPFragment extends Fragment implements OnSharedPreferenceChangeListener
{
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
// In response to preference changes, we want to modify the PreferenceActivity controls.
// So it seems we would need a reference to the PreferenceActivity subclass "Preferences
}
}
E, infine, la sottoclasse PreferenceActivity "Preferenze" non fa altro che aprire la vista delle impostazioni.
public class Preferences extends PreferenceActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences_cp);
}
}
Come ho già detto, noi preferiremmo essere in grado di modificare la preferenza personalizzato in CPFragment (in contrapposizione al PreferenceActivity). Quindi stavo cercando un modo per localizzare PreferenceActivity mentre rispondevo come onSharedPreferenceChangeListener in CPFragment.
Penso che si sia downvoted perché la domanda non è chiara. Per favore chiarisci cosa stai chiedendo. Stai cercando di aggiornare la tua attività 'Preferenze' da un' Frammento'? È anche possibile registrare un 'OnSharedPreferenceChangeListener' dall'attività. –
Hmmm ... non sono sicuro di cosa non è chiaro, premetto che "OnSharedPreferenceChangeListener esiste in un altro frammento (non nella sottoclasse PreferenceActivity)". Ma in questo altro frammento ho bisogno di modificare una preferenza personalizzata. Quindi ho bisogno di un riferimento in qualche modo alla PreferenceActivity per modificare la preferenza personalizzata. –