Android - Использование PrefencesCreen для отображения и сохранения настроек в/из ContentProvider

StackOverflow https://stackoverflow.com/questions/2507322

Вопрос

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

Я загружаю настройки из ContentProvider на создание моей деятельности настроек.

Мое действие настроек состоит из предпочтений, на основе диалога EditText.

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

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

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

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

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


Код

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");
        }
    }       
}
Это было полезно?

Решение

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

Также посмотрите на getEditText Метод, который вернет EditText диалога, и вы можете установить значение там. Или даже заглянуть в 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top