2013-02-11 10 views
6

Die App, die ich entwickle, hat eine Aktivität, die sich erweitert SherlockFragmentActivity. Ich möchte die Präferenzen api verwenden, um der Aktivität leicht Präferenzen hinzuzufügen. Da ich API-Level 8 und höher unterstützen möchte, muss ich die Aktivität aus der Klasse SherlockPreferenceActivity erweitern.Android PreferenceActivity und Dialogfeldfragmente

Das Problem ist, dass die Aktivität einen Dialog anzeigen muss. Der Dialog erweitert sich um SherlockDialogFragment. Die Methode des Dialogfelds benötigt zwei Parameter: ein FragmentManager Objekt und ein String Tag.
Um das Objekt FragmentManager zu bekommen, rief ich die getSupportFragmentManager() Methode der Aktivität an. Diese Methode fehlt in SherlockPreferenceActivity. Ich habe versucht, getFragmentManager() zu verwenden, aber Eclipse-sagt, dass

Die Methode show (FragmentManager, String) in der Art DialogFragment ist nicht anwendbar für die Argumente (FragmentManager, String)

Wie kann ich die Show Dialogfragment von SherlockPreferenceActivity?

+0

Ich habe das gleiche Problem. Wir müssen den FragmentManager aus dem Support-Paket beziehen, aber SherlockPreferenceActivity gibt es nicht. = ( –

+1

) Ich habe es auf andere Weise gelöst. Erstellen Sie eine andere Aktivität unter dem gleichen Paket (denken Sie daran, diese neue Aktivität dem Manifest hinzuzufügen.) Erweitern Sie SherlockPreferenceActivity und implementieren Sie die Schnittstelle SharedPreferences.OnSharedPreferenceChangeListener Sehen Sie sich die Android-Entwickler-Website an, um zu verstehen Wie schreibe ich diese Aktivität Verwenden Sie diese Aktivität, um die Benutzereinstellungen zu verwalten Wenn die Benutzer die Einstellungsschaltfläche drücken, starten Sie die Einstellungsaktivität mit einer Absicht In der Hauptaktivität können Sie die Einstellungen mit dem PreferenceManager lesen. –

Antwort

0

Sie sollten Shared Preferences anstatt PreferenceActivity verwenden. Deklarieren Sie diese Verweise in einer separaten Hilfsklasse, anstatt sie auf eine Aktivität zu erweitern. Dadurch haben Sie die Flexibilität, ein benutzerdefiniertes Layout zu erstellen.

Beispiel:

public class SharePrefManager { 
    // Shared Preferences 
    SharedPreferences pref; 

    // Editor for Shared preferences 
    Editor editor; 

    // Context 
    Context _context; 

    // Shared pref mode 
    int PRIVATE_MODE = 0; 

    // Sharedpref file name 
    private static final String PREF_NAME = "selfhelppref"; 

    //Your configurable fields 
    public static final String KEY_PREF1 = "pref1"; 
    public static final String KEY_PREF2 = "pref2"; 
    public static final String KEY_PREF3 = "pref3"; 


    public SharePrefManager(Context context){ 
     this._context = context; 
     pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE); 
     editor = pref.edit(); 
    } 

    //Setter function for configurable field 
    public void setPref(String key, String value){ 
     editor.putString(key, value); 
    } 

    //Getter function for configurable field 
    public String getPref(String key){ 
      return editor.getString(key); 
    } 
} 

auf Ihre Aktivität Referenzierung

SharePrefManager SM = new SharePrefManager(this); 
SM.setPref(SM.KEY_PREF1, "name"); 
String value = SM.getPref(SM.KEY_PREF1); 
0

Versuchen SherlockDialogFragment.getSherlockActivity().getSupportFragmentManager() verwenden.

Beispiel: mySherlockDialogFragment.show(mySherlockDialogFragment.getSherlockActivity().getSupportFragmentManager(), "my_tag");

Verwandte Themen