2011-01-10 15 views
1

私は、SyncアカウントとManageアカウントでユーザーアカウントを作成するためのウィザードを構築しています。私は自分のアクティビティがAccountAuthenticatorActivityでなければならないViewFlipperを使用します。つまり、PreferenceActivityを継承できないということも意味します。ビューに環境設定を表示する方法

私はPreferenceActivityのコードを調べて、ListViewから継承するPreferenceViewを持つことが可能であると信じています。私が知る限り、PreferenceActivityのActivity部分は実際には必要ありません。

PreferenceManagerは実際に私をブロックしますが、

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

この関数は、operator newを使用してPreferenceManagerを実装できることを意味します。どうやら、sdkはPreferenceManagerのコンストラクタを隠しています。私は混乱しています。

私の環境設定を膨らませてPreferenceActivityなしで表示する方法はありますか?

答えて

1

環境設定を拡張してPreferenceActivityなしで表示する方法はありますか?

SDK、AFAIK経由ではありません。

このウィザードでは、「同期と管理アカウントでユーザーアカウントを作成するためのウィザードを構築しています」という設定を表示したり変更したりしていないため、なぜPreferenceオブジェクトを使用するかはわかりませんが、とにかくちょうど通常のウィジェットを使用してください。

+0

何ですか?私はそれらを表示するようにしているので、私はそれらを編集することができます。私の質問で明確ではなかったことは何ですか?ウィザードの最後のステップは、同期のアカウントのプリファレンスを設定することです。私は環境設定を含むxmlファイルを持っています、それは他の場所で使用されます。 –

+0

@サイビーム: "私の質問ではっきりしなかったことは何ですか?"なぜあなたは好みを気にしていますか? 「ウィザードの最後のステップは、同期のアカウントのプリファレンスを設定することです。これはあなたの質問には言及されていません。また、設定XMLがより汎用的な構造ではなく、 'PreferenceActivity'での使用のために設計されている限り、答えを変更しません。 – CommonsWare

0

はい、イニシエータはAccountAuthenticatorActivityである必要がありますが、私はそれが好きな活動を開始できると推測します。 AccountAuthenticatorActivityは必ずしも独自のGUIを表示する必要はありません。

これは私たちがやる方法です。優先アクティビティを開始するaddAccountリクエストを受信します。インテントは解析され、新しいアカウントが要求され、適切なGUIが表示されているかどうかが確認されます。ウィザードが完了すると、結果のアカウントはIntentの結果でAccountAuthenticatorActivityに返されます。

/* 
    * 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:ちょうど私が質問に正確に答えなかったことを実感しました。あなたが望むことを実行するために選択したソリューションは、実際には以下のように提案されています。ウィザードのPreferenceActivityではなく、上記のaddAccount関数によって呼び出される標準アクティビティを使用します。