Как отобразить настройки в представлении

Я создаю своего рода мастер для создания учетных записей пользователей в учетной записи Sync and Manage. Я использую ViewFlipper, моя активность должна быть AccountAuthenticatorActivity. Тем не менее, это также означает, что я не могу наследовать PreferenceActivity.

Итак, я посмотрел код PreferenceActivity и считаю, что должно быть возможно иметь PreferenceView, наследуемый от ListView. Насколько я знаю, часть Activity в PreferenceActivity на самом деле не нужна.

Хотя PreferenceManager - это то, что действительно блокирует меня.

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

Эта функция подразумевает, что мы можем создать PreferenceManager с помощью оператора new. Судя по всему, SDK скрывает конструктор PreferenceManager. Я немного смущен.

Есть ли способ раздуть мои предпочтения и отобразить их без PreferenceActivity?


person Loïc Faure-Lacroix    schedule 10.01.2011    source источник


Ответы (2)


Есть ли способ раздуть мои предпочтения и отобразить их без PreferenceActivity?

Не через SDK, насколько я знаю.

Поскольку вы не показываете и не изменяете настройки в этом мастере («Я создаю своего рода мастер для создания учетных записей пользователей в Sync and Manage account»), я понятия не имею, почему вы все равно захотите использовать объекты Preference. Просто используйте обычные виджеты.

person CommonsWare    schedule 10.01.2011
comment
Какая? Я пытаюсь показать их, чтобы я мог редактировать их. Что непонятного в моем вопросе? Последним шагом мастера является установка параметров учетной записи для синхронизации. У меня есть файл xml, содержащий настройки, он будет использоваться в некоторых других местах. - person Loïc Faure-Lacroix; 10.01.2011
comment
@Sybiam: Что было непонятно в моем вопросе? -- зачем вы заморачиваетесь с предпочтениями. Последним шагом мастера является установка параметров учетной записи для синхронизации — это не упоминается в вашем вопросе. Это также не меняет ответа, поскольку XML предпочтений предназначен для использования с PreferenceActivity, а не как конструкция более общего назначения. - person CommonsWare; 10.01.2011

Да, инициатором может быть AccountAuthenticatorActivity, но я предполагаю, что он, в свою очередь, может начать любое действие, которое пожелает. AccountAuthenticatorActivity не обязательно должен показывать собственный графический интерфейс.

Вот как мы это делаем; получить запрос addAccount, который запускает действие предпочтения. Намерение анализируется, чтобы увидеть, запрашивается ли новая учетная запись, и отображается соответствующий графический интерфейс. Когда мастер завершит работу, полученная учетная запись будет передана обратно AccountAuthenticatorActivity через результат 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;
    }

РЕДАКТИРОВАТЬ: Только что понял, что я не совсем ответил на вопрос. Решение, которое мы выбрали, чтобы сделать то, что вы хотите, на самом деле такое, как предложено ниже; не использование PreferenceActivity для мастера, а стандартное действие, вызываемое показанной выше функцией addAccount.

person method    schedule 30.11.2012