Android - Использование PrefencesCreen для отображения и сохранения настроек в/из ContentProvider
-
22-09-2019 - |
Вопрос
У меня есть свой собственный поставщик пользовательского контента, который загружает базу данных, которая содержит информацию о настройках для моего приложения.
Я загружаю настройки из 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);