我有一个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可能是一种解决方法。
答案 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
正在延伸。