Mam starszy kod, który rozszerza PreferenceActivity z podklasą o nazwie "Preferences". PreferenceActivity wywoływany jest w następujący sposób:Jak odwołać się lub "znaleźć" PreferenceActivity?
Intent intent = new Intent(this, Preferences.class);
this.startActivity(intent);
OnSharedPreferenceChangeListener występuje w drugiego fragmentu (nie podklasy PreferenceActivity), ale musi odniesienie do PreferenceActivity w celu modyfikacji cech preferencją dostosowanych/sterowania podobny do:
pref = (CheckBoxPreference) prefActivity.findPreference(res.getString(R.string.keyAccount));
pref.setSummary("something");
gdzie "prefAktywność" jest odniesieniem do PreferenceActivity. Czy ktoś może zasugerować, w jaki sposób zapisać odniesienie do PreferenceActivity, gdy jest on tworzony lub w inny sposób zlokalizować PreferenceActivity w razie potrzeby?
EDYTOWANIE: W tym rażąco uproszczony kod, aby pomóc w wyświetlaniu hierarchii i wyjaśnieniu.
Funkcja FragmentActivity CPActivity tworzy instancję CPFragment i na żądanie (naciśnięcie przycisku) tworzy intencję uruchomienia podpozycji PreferenceActivity (zwanej "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 jest naszym wspólnym słuchaczem preferencji (między innymi). W tym kodzie chcemy zmodyfikować niestandardową kontrolę preferencji/wpis (to znaczy nie samą wartość preferencji, a raczej atrybuty w elemencie kontroli preferencji, np. CheckBoxPreference). Chcielibyśmy to zrobić tutaj, ponieważ tutaj obliczane są odpowiednie dane.
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
}
}
I wreszcie podklasa PreferenceActivity "Preferences" robi niewiele więcej niż widok Settings.
public class Preferences extends PreferenceActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences_cp);
}
}
Jak już wspomniałem, wolimy być w stanie zmodyfikować preferencję Niestandardowa w CPFragment (w przeciwieństwie do PreferenceActivity). Dlatego szukałem jakiegoś sposobu na zlokalizowanie PreferenceActivity podczas odpowiadania jako onSharedPreferenceChangeListener w CPFragment.
Myślę, że dostajesz obniżone oceny, ponieważ pytanie jest niejasne. Proszę wyjaśnić, o co prosisz. Czy próbujesz zaktualizować działanie 'Preferences' z' Fragment'? Możesz zarejestrować 'OnSharedPreferenceChangeListener' również z działania. –
Hmmm ... nie jestem pewien, co jest niejasne, stwierdzam "OnSharedPreferenceChangeListener istnieje w innym fragmencie (nie podklasę PreferenceActivity)". Ale w tym innym Fragmentie muszę zmodyfikować niestandardową preferencję. Potrzebuję więc odwołania do PreferenceActivity w celu zmodyfikowania niestandardowych preferencji. –