开发者

How to display Preferences in a View

开发者 https://www.devze.com 2023-02-04 09:15 出处:网络
I\'m building some sort of wizard to create user accounts in Sync and Manage account. I use a ViewFlipper my activity has to be an AccountAuthenticatorActivity. That said it also means I can\'t inheri

I'm building some sort of wizard to create user accounts in Sync and Manage account. I use a ViewFlipper my activity has to be an AccountAuthenticatorActivity. That said it also means I can't inherit PreferenceActivity.

So I looked up in the code of PreferenceActivity and I believe it should be possible to have a PreferenceView that inherit from ListView. The Activity part of PreferenceActivity isn't really needed as far as I know.

Though the PreferenceManager is what really blocks me.

private PreferenceManager onCreatePreferenceManager() {
    PreferenceManager preferenceManager = new PreferenceManager(this, FIRST_REQUEST_CODE);
    preferenceManager.setOnPrefe开发者_StackOverflow中文版renceTreeClickListener(this);
    return preferenceManager;
}

This function imply that we can instatiate PreferenceManager using the operator new. Apparently, the sdk hide the constructor of the PreferenceManager. I'm kind of confused.

Is there a way to inflate my preferences and display them without PreferenceActivity?


Is there a way to inflate my preferences and display them without PreferenceActivity?

Not via the SDK, AFAIK.

Since you are neither showing nor modifying preferences in this wizard ("I'm building some sort of wizard to create user accounts in Sync and Manage account"), I have no idea why you would want to use Preference objects, anyway. Just use regular widgets.


Yes, the initiator may need to be an AccountAuthenticatorActivity but I presume that, in turn, can start any activity it would like. The AccountAuthenticatorActivity douesn't necessarily have to show its own GUI.

This is how we do it; receive the addAccount request which kicks off a preference activity. The intent is parsed to see if a new account is requested and the appropriate GUI is shown. When the wizard is done, the resulting account is passed back to AccountAuthenticatorActivity via the result Intent.

    /*
     * 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: Just realized I didn't exactly answer the question. The solution we've chosen to do what you want is actually as suggested below; not using a PreferenceActivity for the wizard but a standard activity called by the addAccount function shown above.

0

精彩评论

暂无评论...
验证码 换一张
取 消