Android - Использование PreferenceScreen для отображения и сохранения настроек в / из ContentProvider - PullRequest
1 голос
/ 24 марта 2010

У меня есть свой собственный контент-провайдер, который загружает базу данных, которая содержит информацию о настройках моего приложения.

Я загружаю настройки из ContentProvider при создании действия «Настройки».

Действия «Мои настройки» состоят из редактируемого текста на основе PreferenceScreen и Dialog.

Следующий код показывает, как я использую экран настроек и редактирую тексты.

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

Проблема на втором изображении: когда я щелкаю по выбору в меню, диалоговое окно появляется, но оно пустое, я хотел бы иметь возможность загружать данные из моего поставщика контента в текст редактирования в диалоговом окне, поэтому на первом изображении в качестве имени пользователя указано «Донал», а на втором изображении «Донал» также должен появиться в тексте редактирования в диалоговом окне.

Я также хотел бы иметь возможность прослушивать кнопку «ОК» в диалоговом окне, поэтому, когда пользователь изменяет настройку, я могу обновить данные в моем поставщике контента.

Может кто-нибудь помочь мне с тем, что я пытаюсь сделать?


Код

public class PreferencesApp extends PreferenceActivity {

String name;
EditTextListener etl;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    loadSettingsFromProvider();
    etl = new EditTextListener(this);

    setPreferenceScreen(createPreferenceHierarchy());
}

private PreferenceScreen createPreferenceHierarchy() {
    // Root
    PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);

    // Dialog based preferences
    PreferenceCategory dialogBasedPrefCat = new PreferenceCategory(this);
    dialogBasedPrefCat.setTitle(R.string.dialog_based_preferences);
    root.addPreference(dialogBasedPrefCat);

    // Edit text preference
    EditTextPreference editTextPref = new EditTextPreference(this);
    editTextPref.setDialogTitle(R.string.dialog_title_edittext_preference);
    editTextPref.setKey("edittext_preference");
    editTextPref.setTitle(R.string.title_edittext_preference);
    editTextPref.setSummary(name);
    dialogBasedPrefCat.addPreference(editTextPref);


    return root;
}

public class EditTextListener extends EditTextPreference{

    public EditTextListener(Context context){

        super(context);

    }

    @Override
    //When the dialog is closed, perform the relevant actions
    protected void onDialogClosed(boolean positiveResult) {

        if (positiveResult) {
         String text=getEditText().getText().toString();
         Log.d("DIALOG CLOSED", "OK");
         }
        else {
         // cancel hit
         Log.d("DIALOG CLOSED", "CANCEL");
        }
    }       
}

1 Ответ

1 голос
/ 24 марта 2010

Поиск доступных методов в документации .
Вы можете подписаться на onDialogClosed, чтобы получить событие OK или Отмена.

Также обратите внимание на метод getEditText, который возвращает текст редактирования диалога, и вы можете установить значение там. Или даже посмотрите на setText, вы можете установить значение с его помощью. Это позже не проверено мной.

РЕДАКТИРОВАТЬ 1

Извините, вы не можете подписаться. Вы должны создать подкласс EditTextPreference и переопределить метод. Сложный пример: здесь но вам не нужны все вещи, которые вас интересуют:

@Override
//When the dialog is closed, perform the relevant actions
protected void onDialogClosed(boolean positiveResult) {

    if (positiveResult) {
     String text=getEditText().getText().toString();
     }
    else {
     // cancel hit
    }
}

РЕДАКТИРОВАТЬ 2

Вы должны сбросить

etl = new EditTextListener(this);

Вы должны реализовать свой новый класс

EditTextPreference editTextPref = new EditTextListener(this);

поэтому код станет

// Edit text preference
EditTextPreference editTextPref = new EditTextListener(this);
editTextPref.setDialogTitle(R.string.dialog_title_edittext_preference);
editTextPref.setKey("edittext_preference");
editTextPref.setTitle(R.string.title_edittext_preference);
editTextPref.setSummary(name);
dialogBasedPrefCat.addPreference(editTextPref);
...