2011-01-10 13 views
1

Ich erstelle eine Art Assistenten, um Benutzerkonten im Konto "Sync" und "Manage" zu erstellen. Ich benutze einen ViewFlipper, meine Aktivität muss eine AccountAuthenticatorActivity sein. Das heißt aber auch, dass ich PreferenceActivity nicht erben kann.So zeigen Sie die Einstellungen in einer Ansicht an

Also habe ich in den Code von PreferenceActivity nachgeschlagen und ich glaube, es sollte möglich sein, eine PreferenceView zu haben, die von ListView erben. Der Aktivitätsteil von PreferenceActivity wird, soweit ich weiß, nicht wirklich benötigt.

Obwohl der PreferenceManager mich wirklich blockiert.

private PreferenceManager onCreatePreferenceManager() { 
    PreferenceManager preferenceManager = new PreferenceManager(this, FIRST_REQUEST_CODE); 
    preferenceManager.setOnPreferenceTreeClickListener(this); 
    return preferenceManager; 
} 

Diese Funktion bedeutet, dass wir PreferenceManager mit dem Betreiber neuem instatiate können. Offenbar versteckt der SDK den Konstruktor des PreferenceManagers. Ich bin irgendwie verwirrt.

Gibt es eine Möglichkeit, meine Einstellungen aufzublähen und ohne PreferenceActivity anzuzeigen?

Antwort

1

Gibt es eine Möglichkeit, meine Einstellungen aufzublähen und ohne PreferenceActivity anzuzeigen?

Nicht über das SDK, AFAIK.

Da Sie in diesem Assistenten keine Einstellungen anzeigen oder ändern ("Ich erstelle eine Art von Assistent zum Erstellen von Benutzerkonten in Sync und Konto verwalten"), habe ich keine Ahnung, warum Sie Preference Objekte verwenden möchten. sowieso. Verwenden Sie einfach normale Widgets.

+0

Was? Ich versuche, sie zu zeigen, damit ich sie bearbeiten kann. Was war nicht klar in meiner Frage? Der letzte Schritt des Assistenten besteht darin, die Einstellungen für das Konto für die Synchronisierung festzulegen. Ich habe eine XML-Datei, die Einstellungen enthält, wird an einigen anderen Orten verwendet. –

+0

@Sybiam: "Was war nicht klar in meiner Frage?" - warum Sie sich mit Vorlieben beschäftigen. "Der letzte Schritt des Assistenten besteht darin, die Einstellungen des Accounts für die Synchronisierung festzulegen" - dies wird in Ihrer Frage nicht erwähnt. Es ändert auch nicht die Antwort, insofern Präferenz-XML für die Verwendung mit 'PreferenceActivity' konzipiert ist, nicht als ein allgemeineres Konstrukt. – CommonsWare

0

Ja, der Initiator muss möglicherweise ein AccountAuthenticatorActivity sein, aber ich nehme an, dass wiederum jede Aktivität beginnen kann, die es möchte. Die AccountAuthenticatorActivity muss nicht unbedingt eine eigene GUI zeigen.

So machen wir es; erhalten Sie die addAccount Anfrage, die eine Vorzugsaktivität startet. Die Absicht wird analysiert, um festzustellen, ob ein neues Konto angefordert wurde und die entsprechende GUI angezeigt wird. Wenn der Assistent fertig ist, wird das resultierende Konto über das Ergebnis Intent an AccountAuthenticatorActivity zurückgegeben.

/* 
    * The user has requested to add a new account to the system. We return 
    * an intent that will launch our login screen if the user has not 
    * logged in yet, otherwise our activity will just pass the user's 
    * credentials on to the account manager. 
    */ 
    @Override 
    public Bundle addAccount(AccountAuthenticatorResponse response, 
      String accountType, String authTokenType, 
      String[] requiredFeatures, Bundle options) 
      throws NetworkErrorException { 
     Bundle result = new Bundle(); 
     Intent i = new Intent(mContext, PrefsActivity.class); 
     i.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, 
       response); 
     i.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT, 
       ServerPrefsFragment.class.getName()); 
     result.putParcelable(AccountManager.KEY_INTENT, i); 
     return result; 
    } 

EDIT: Nur realisiert, dass ich die Frage nicht genau beantwortete. Die Lösung, die wir gewählt haben, um zu tun, was Sie wollen, ist eigentlich wie unten vorgeschlagen; Verwenden Sie keine PreferenceActivity für den Assistenten, sondern eine Standardaktivität, die von der oben gezeigten addAccount-Funktion aufgerufen wird.

Verwandte Themen