1

可能重复:
如何调用 EditTextPreference 中的确定按钮

我想验证 EditTextPreference 对话框的输入(输入 6 位数字)。

这就是我的(相关)preferences.xml 片段的样子:

            <!--EditTextPreference-->
            <com.app.preferences.UpdatePincodePreference
                android:key="PIN_CODE_PREFERENCE"
                android:title="@string/pincode_preference_title" 
                android:summary="@string/pincode_preference_summary"
                android:dialogTitle="@string/pincode_preference_dialog_title"
                android:dialogMessage="@string/pincode_preference_dialog_message" 
                android:inputType="number"
            />

如何测试用户在首选项对话框的 EditText 中输入的数字是否少于或多于 6 位?

基本上我需要在 OK 按钮上设置一个 onClickListener(),但是如何获得我没有定义的 OK 按钮。它是 EditTextPreference 的默认视图,取消按钮也是如此。

该问题与“如何调用 EditTextPreference 中的确定按钮”完全相同,但已接受的解决方案中提供的链接现在已损坏。

4

3 回答 3

2

该解决方案的作者已将他的项目从 Google Code 移至 GitHub。您可以在https://github.com/Knickedi/android-toolbox找到新项目,以及他指的是验证DialogPreference和验证的两个文件的链接EditTextPreference

于 2012-04-20T11:33:38.533 回答
2

这可以使用 setOnPreferenceChangeListener() 来实现

public UpdatePasswordPreference(Context context, AttributeSet attrs) {


    this.setOnPreferenceChangeListener(new OnPreferenceChangeListener() 
    {   
        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue) 
        {
            MobicopLogger.d("Preference input changed");
            try 
            {
                if(newValue.toString().length() != 6)
                    return false;
                else
                    return true;
            }
            catch(Exception e)
            {
                return false;
            }
        }

    });


}
于 2012-04-25T05:39:05.640 回答
0

创建一个自定义布局并通过以下覆盖方法将其应用于首选项:

@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
    super.onPrepareDialogBuilder(builder);    //To change body of overridden methods use File | Settings | File Templates.
    builder.setView(LayoutInflater.from(ctx).inflate(R.layout.custome_preference_layout,null));
}
于 2012-04-25T09:07:24.487 回答