具有最小字符要求的EditTextPreference

时间:2013-12-28 23:28:16

标签: android string android-edittext preferences

我有一个EditTextPreference我可以使用它来设置应用的密码。我想要一个4位数的密码。我在xml文件中设置了maxLength = "4"。现在我有问题是不允许提交,除非输入的密码是4位数。

这就是我所拥有的:

 <EditTextPreference
            android:defaultValue=""
            android:dependency="EnablePasscode"
            android:dialogMessage="Add a numeric passcode to provide access to enter the app.  The passcode must be 4 digits."
            android:dialogTitle="Set Passcode"
            android:inputType="number"
            android:key="passcode"
            android:maxLength="4"
            android:password="true"
            android:title="Set Passcode" />

现在用Java:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
        String key) {

    if (key.equals("passcode")) {
        EditTextPreference setPasscode = (EditTextPreference) findPreference("passcode");
        if (setPasscode.getText().toString().length() == 4) {
            // return true
        }
    }

}

如果return true注释掉,我不知道如何处理这个问题;我知道我不做return;如果长度为4,我想要它提交对话框,否则如果它是0,1,2或3,则抛出toast。我在哪里以及如何做到这一点?

更新:要验证此首选项,我需要控制我没有的OK按钮; this可能是一种解决方法。

1 个答案:

答案 0 :(得分:2)

private EditTextPreference preference;

this.preference = ((EditTextPreference) getPreferenceScreen() //put this in the onCreate                
                .findPreference("passcode"));

  if (key.equals("passcode")) {
        EditTextPreference setPasscode = (EditTextPreference) findPreference("passcode");
        if (sharedPreferences.getString("passcode","0").length() != 4) {
           Toast.makeText(this, "Should be 4 digits", Toast.LENGTH_LONG).show();
           this.preference.setText(null);
           return;
        }else{
              Toast.makeText(this, "Success!", Toast.LENGTH_LONG).show();
             }
    }
这样的事情可以帮助你。请注意,getPreferenceScreen已弃用,建议您使用PreferenceFragment。我假设PreferenceActivity正在延伸。