Android - Usando PreferênciasCreen para exibir e salvar configurações de para/para o ContentProvider
-
22-09-2019 - |
Pergunta
Eu tenho meu próprio provedor de conteúdo personalizado que carrega um banco de dados que contém as informações de configurações para o meu aplicativo.
Carrego as configurações do ContentProvider na criação da minha atividade de configurações.
Minha atividade de configurações é composta por uma tela de preferências e a de diálogo baseada em diálogo.
O código a seguir mostra como eu uso a tela de preferência e edito textos.
Portanto, como você pode ver na primeira imagem, isso funciona e exibe o menu com as informações abaixo.
O problema está na imagem dois, quando clico em uma opção no menu que a caixa de diálogo aparece, mas está vazia, gostaria de poder carregar os dados do meu provedor de conteúdo no texto de edição na caixa de diálogo, portanto, na imagem Um mostra "Donal" como o nome de usuário, portanto, na imagem dois "donal" também deve aparecer no texto de edição na caixa de diálogo.
Eu também gostaria de poder ouvir o botão OK na caixa de diálogo; portanto, quando um usuário altera uma configuração, posso atualizar os dados no meu provedor de conteúdo.
Alguém pode me ajudar com o que estou tentando fazer?
Código
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");
}
}
}
Solução
Procure os métodos disponíveis no Documentação.
Você pode se inscrever onDialogClosed
Para obter o Evento OK ou Cancelar, clique em
Também olhe para getEditText
Método que retornará o EditText da caixa de diálogo e você poderá definir o valor lá. Ou até olhar para setText
, talvez você possa definir o valor com ele. Isso mais tarde não testado por mim.
Editar 1
Desculpe, você não pode se inscrever. Você tem que subclasse o EditTextPreference
e substituir o método. Um exemplo complexo é aqui Mas você não precisa de todas as coisas que está interessado nisso:
@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
}
}
Editar 2
Você tem que cair
etl = new EditTextListener(this);
Você tem que implementar sua nova classe
EditTextPreference editTextPref = new EditTextListener(this);
Então o código se tornará
// 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);