2014-06-25 16 views
5

Ich habe ein Einstellungsmenü für meine App basierend auf PreferenceFragment erstellt und möchte von einer anderen Stelle in der App aus auf die Einstellungsdialoge zugreifen, ohne das Einstellungsmenü öffnen zu müssen.Android: Wie öffne ich einen ListPreference-Dialog von außerhalb PreferenceActivity/PreferenceFragment?

Meine Einstellungen-Menü hat dies:

settings menu

und ich möchte den gleichen Dialog zeigen, wenn ich aus der Haupttätigkeit diesen Menüpunkt klicken:

main activity

Der Haupt Activity hat einen ListFragment, wo alle UI-Code ist. Weder ist ein PreferenceActivity oder PreferenceFragment.

Ich möchte nur das gleiche PreferenceFragment Objekt aufrufen, um zum Dialog zu gelangen, sonst müsste ich benutzerdefinierten Code schreiben, um die Einstellungsänderungen manuell zu bearbeiten, was ich vermeiden möchte.

Ich dachte, das Hinzufügen der zu FragmentManager in der Haupt Activity würde es instanziieren, aber es scheint nicht zu funktionieren.

Von meinem Menü-Handler Code für das "Sortieren" Option:

SettingsFragment fragment = (SettingsFragment) getFragmentManager().findFragmentByTag(SettingsActivity.FRAGMENT_TAG); 

    // first run case 
    if (fragment == null) { 
     fragment = SettingsFragment.newInstance(getActivity()); 
     getFragmentManager().beginTransaction().add(fragment, SettingsActivity.FRAGMENT_TAG).commit(); 
    } 

    CustomListPreference listPref = (CustomListPreference) fragment.findPreference(SettingsFragment.KEY_PREF_SORTORDER); 
    listPref.show(); // invokes showDialog(null) 

Dieser stürzt mit einem NullPointerException auf listPref, die die PreferenceFragment zeigt nicht richtig initialisiert.

Gibt es eine Möglichkeit, diesen Effekt zu erzielen, oder muss ich die Funktionalität als AlertDialog schreiben und die Änderungen der Voreinstellungen manuell handhaben?

Antwort

1

Ich denke, dass Sie diese Funktionalität außerhalb der Präferenzklassen selbst schreiben müssen.

Preference, PreferenceActivity und PreferenceFragment waren alle aufeinander abgestimmt, um eine konsistente UIX für Android Anwendungen zur Verfügung zu stellen. Als solche wird empfohlen, sie zusammen zu verwenden, wie sie vorgesehen waren.

Sie nicht direkt auf die Benutzeroberfläche von PreferenceActivity oder PreferenceFragment außerhalb dieser beiden Klassen in einer regulären Tätigkeit replizieren kann, da die Benutzeroberfläche von Preference Objekte gebaut wird, nicht regelmäßige Aktivitäten Objekte wie anzeigen. Also, wenn Sie diese bestimmte Benutzeroberfläche möchten, müssen Sie versuchen und es mit benutzerdefinierten Ansichten zu duplizieren.

https://discussions.udacity.com/t/way-to-do-listpreference-outside-of-settings-menu/45473