Ich habe Legacy-Code, der PreferenceActivity mit einer Unterklasse namens "Preferences" erweitert. Die PreferenceActivity wird aufgerufen, wie folgt:Wie kann man eine PreferenceActivity referenzieren oder "finden"?
Intent intent = new Intent(this, Preferences.class);
this.startActivity(intent);
Die OnSharedPreferenceChangeListener in einem anderen Fragment A vorhanden ist (nicht der PreferenceActivity Subklasse), sondern ein Verweis auf die PreferenceActivity braucht, um Attribute einer benutzerdefinierten Präferenz zu ändern/steuern ähnlich der folgenden:
pref = (CheckBoxPreference) prefActivity.findPreference(res.getString(R.string.keyAccount));
pref.setSummary("something");
wobei "prefActivity" der Verweis auf die PreferenceActivity ist. Kann jemand vorschlagen, wie eine Referenz auf die PreferenceActivity gespeichert wird, wenn sie erstellt wird, oder die PreferenceActivity bei Bedarf anderweitig zu finden?
EDIT: Einschließlich der stark vereinfachten Code, um hoffentlich helfen, Hierarchien zu zeigen und zu verdeutlichen.
Die FragmentActivity CPActivity instanziiert CPFragment und bei Bedarf (ein Tastendruck) erstellt eine Absicht, eine PreferenceActivity-Unterklasse ("Preferences" genannt) auszulösen.
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 ist unsere gemeinsame Präferenz Listener (unter anderem). In diesem Code möchten wir ein benutzerdefiniertes Steuerelement/einen benutzerdefinierten Eintrag ändern (dh nicht den Präferenzwert selbst, sondern Attribute für das Präferenzsteuerelement, z. B. eine CheckBoxPreference). Wir würden es gerne hier machen, denn hier werden die relevanten Daten berechnet.
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
}
}
Und schließlich macht die PreferenceActivity Unterklasse „Preferences“ wenig mehr als die Einstellungen Ansicht aufzurufen.
public class Preferences extends PreferenceActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences_cp);
}
}
Wie ich bereits erwähnt, würden wir in der Lage sein es vorziehen, die benutzerdefinierte Einstellung in CPFragment (im Gegensatz zu dem PreferenceActivity) zu ändern. Daher suchte ich nach einer Möglichkeit, die PreferenceActivity zu finden, während ich in CPFragment als onSharedPreferenceChangeListener reagierte.
Ich denke, dass Sie downvoted werden, weil die Frage unklar ist. Bitte klären Sie, was Sie fragen. Versuchen Sie, Ihre 'Preferences' Aktivität von einem' Fragment' zu aktualisieren? Sie können auch einen 'OnSharedPreferenceChangeListener' aus der Aktivität registrieren. –
Hmmm ... nicht sicher, was unklar ist, ich behaupte, "OnSharedPreferenceChangeListener existiert in einem anderen Fragment (nicht die PreferenceActivity-Unterklasse)". Aber in diesem anderen Fragment muss ich eine benutzerdefinierte Präferenz ändern. Also brauche ich irgendwie einen Verweis auf die PreferenceActivity, um die benutzerdefinierte Präferenz zu ändern. –