如何将EditOnClickListener()设置为EditTextPreference对话框的OK按钮?

时间:2012-04-20 11:10:17

标签: android android-edittext android-preferences

  

可能重复:
  how to call the ok button in the 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的默认视图,Cancel按钮也是如此。

问题与“how to call the ok button in the EditTextPreference”完全相同,但现在已解决了已接受解决方案中提供的链接。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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;
            }
        }

    });


}

答案 2 :(得分: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));
}