У меня есть свой собственный контент-провайдер, который загружает базу данных, которая содержит информацию о настройках моего приложения.
Я загружаю настройки из 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");
}
}
}