Comment faire un PreferenceActivity lancer une boîte de Dialogue personnaliser la préférence

J'ai une Préférences de travail de l'installation lancée à partir d'une option de menu. Dans les préférences, j'ai le programme d'installation Personnalisé Préférence qui doit lancer un dialogue avec les 3 TextViews pour définir confirmer et modifier un mot de passe. Maintenant, je ne sais pas comment lancer la boîte de dialogue à partir de la PreferenceActivity de onPreferenceClick. Si je ressemble à un newby - je suis désolé!

Voici mon xml mise en page de la boîte de dialogue pop-up:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
android:id="@+id/root"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/TextView_Pwd1"
android:text="@string/settings_oldpassword"
android:textStyle="bold" />
<EditText
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/EditText_OldPwd" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/TextView_Pwd1"
android:text="@string/settings_password"
android:textStyle="bold" />
<EditText
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/EditText_Pwd1"
android:inputType="textPassword" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/TextView_Pwd2"
android:text="@string/settings_password2"
android:textStyle="bold" />
<EditText
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/EditText_Pwd2"
android:inputType="textPassword" />
<TextView
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/TextView_PwdProblem"
android:textStyle="bold"
android:gravity="center" />
<TextView
android:id="@+id/TextView_PwdProblem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/settings_pwd_not_equal" />
<CheckBox
android:id="@+id/checkShowPwdText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/settings_showpwd_text" />

Voici mon DialogChangePassword classe de la boîte de dialogue pop-up:

package biz.linsys.package;
import android.app.Dialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.DialogPreference;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class DialogChangePassword extends DialogPreference {
private String strPass1;
private String strPass2;
public DialogChangePassword(Context context, AttributeSet attrs) {
super(context, attrs);
setDialogLayoutResource(R.layout.dialog_pwdchange);
}
@Override
protected void onBindDialogView(View view) {
Dialog pwdDialog            = getDialog();
final EditText password1    = (EditText) pwdDialog.findViewById(R.id.EditText_Pwd1);
final EditText password2    = (EditText) pwdDialog.findViewById(R.id.EditText_Pwd2);
final TextView error        = (TextView) pwdDialog.findViewById(R.id.TextView_PwdProblem);      
password2.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
strPass1 = password1.getText().toString();
strPass2 = password2.getText().toString();
if (strPass1.equals(strPass2)) {
error.setText(R.string.settings_pwd_equal);
} else {
error.setText(R.string.settings_pwd_not_equal);
}
}  public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {}
});
super.onBindDialogView(view);
}
@Override
protected void onDialogClosed(boolean positiveResult) {
if(!positiveResult) return;
SharedPreferences.Editor editor = getEditor();
if (strPass1.equals(strPass2)) {
editor.putString("password", strPass1);
editor.commit();
}
super.onDialogClosed(positiveResult);
}
}

Ce la PreferenceActivity classe contenant des Préférences Personnalisées onPreferenceClick. C'est là que j'ai besoin d'appeler la boîte de dialogue pour modifier le réglage mot de passe utilisateur.

package biz.linsys.package;
import android.content.Context;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
public class Preferences extends PreferenceActivity {
public static Context dialogContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
//Get the custom preference
Preference customPref = (Preference) findPreference("customPref");
customPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
//[ NEED TO CALL DIALOG FROM HERE ]
return false;
}
});
}
}
Donc, vous avez de préférence de l'activité, lorsqu'il est cliqué lance une boîte de dialogue avec des boutons?
Oui, la boîte de dialogue comporte des boutons. Je me rends compte que je ne comprend pas les boutons dans le fichier XML du fichier de Mise en page.
Eh bien j'ai demandé ça parce que, dans le passé, j'ai simplement lancé une petite activité à partir d'un bouton qui avaient du Dialogue de l'interface utilisateur graphique a été le programme d'installation à partir de dans le manifeste:"android:thème="@android:style/Thème.Dialogue". Vous voulez faire cela simplement en essaie de l'activité et de l'esprit pop-up dans un Dialogue.

OriginalL'auteur Lukuluba | 2012-04-04

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *