Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to make a PreferenceActivity launch a Dialog to set a custom preference
    primarykey
    data
    text
    <p>I have a working Preferences setup launched from a menu option. In the preferences I have setup a Custom Preference that must launch a dialog with 3 TextViews to set confirm and change a password. Now I do not know how to launch the dialog from the PreferenceActivity's onPreferenceClick. If I sound like a newby - I am, sorry!</p> <p>Here is my xml layout for the dialog popup:</p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;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"&gt; &lt;TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/TextView_Pwd1" android:text="@string/settings_oldpassword" android:textStyle="bold" /&gt; &lt;EditText android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/EditText_OldPwd" /&gt; &lt;TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/TextView_Pwd1" android:text="@string/settings_password" android:textStyle="bold" /&gt; &lt;EditText android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/EditText_Pwd1" android:inputType="textPassword" /&gt; &lt;TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/TextView_Pwd2" android:text="@string/settings_password2" android:textStyle="bold" /&gt; &lt;EditText android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/EditText_Pwd2" android:inputType="textPassword" /&gt; &lt;TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/TextView_PwdProblem" android:textStyle="bold" android:gravity="center" /&gt; &lt;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" /&gt; &lt;CheckBox android:id="@+id/checkShowPwdText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/settings_showpwd_text" /&gt; </code></pre> <p>Here is my DialogChangePassword class for the dialog popup:</p> <pre><code>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); } } </code></pre> <p>This the PreferenceActivity class containing Custom Preference onPreferenceClick. This is where I need to call the dialog box to change the user password setting.</p> <pre><code>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; } }); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload