Question

J'ai mon propre fournisseur de contenu personnalisé qui charge une base de données qui contient les informations de configuration pour mon application.

Je charge les paramètres de la ContentProvider sur la création de mon activité Paramètres.

Mon activité Paramètres est composée d'une années EditText à base PREFERENCE et dialogue.

Le code suivant montre comment j'utiliser les textes d'écran de préférence et modifier.

Comme vous pouvez le voir sur la première image cela fonctionne et affiche le menu avec les informations ci-dessous.

Le problème est en image à deux, lorsque je clique sur un choix dans le menu la fenêtre de dialogue, mais il est vide, je voudrais être en mesure de charger les données de mon fournisseur de contenu dans le texte d'édition dans la boîte de dialogue, donc en image que l'on ne montre « Donal » comme nom d'utilisateur ainsi dans l'image de deux « Donal » devrait également apparaître dans le texte d'édition dans la boîte de dialogue.

Je voudrais aussi pouvoir écouter le bouton OK dans la boîte de dialogue afin lorsqu'un utilisateur modifie un paramètre que je peux mettre à jour les données dans mon fournisseur de contenu.

Quelqu'un peut-il me aider avec ce que je suis en train de faire?


code

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");
        }
    }       
}
Était-ce utile?

La solution

Lookup les méthodes disponibles dans le Documentation .
Vous pouvez vous abonner à onDialogClosed pour obtenir le OK ou Annuler cliquez sur l'événement.

Regardez aussi dans la méthode de getEditText qui renverra la edittext de la boîte de dialogue, et vous pouvez définir la valeur là-bas. Ou regardez même dans setText, vous pouvez peut-être définir la valeur avec elle. Plus tard non testé par moi.

EDIT 1

Désolé, vous ne pouvez pas souscrire. Vous devez sous-classe la EditTextPreference et remplacer la méthode. Un exemple est complexe mais vous n'avez pas besoin de toutes les choses que vous êtes intéressé par ceci:

@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
    }
}

EDIT 2

Vous devez déposer

etl = new EditTextListener(this);

Vous devez implémenter votre nouvelle classe

EditTextPreference editTextPref = new EditTextListener(this);

le code deviendra

// 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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top