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");
        }
    }       
}
Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top