2014-02-20 20 views
0

我正在實現用戶輸入並保存PIN號碼的首選項。我使用的是EditTextPreference,PIN碼應該是4位數字。爲了驗證它,我用下面的OnPreferenceChangeListener()方法Android - 從EditTextPreference獲取文本並進行驗證

final EditTextPreference pinRetrieve = (EditTextPreference)getPreferenceScreen().findPreference("create_pin"); 

pinRetrieve.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 
      @Override 
      public boolean onPreferenceChange(Preference preference, Object o) { 
       Boolean rtnval = true; 
       if (TextUtils.isEmpty(pinRetrieve.getText())){ 
        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
        builder.setTitle(R.string.pin_error_heading); 
        builder.setMessage(R.string.pin_alert_pin_not_set); 
        builder.setPositiveButton(android.R.string.ok, null); 
        builder.show(); 
        pinSetting.setChecked(false); 
        rtnval = false; 

       } else if (pinRetrieve.getText().length() < 4){ 
        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
        builder.setTitle(R.string.pin_error_heading); 
        builder.setMessage(R.string.pin_alert_pin_less_digits); 
        builder.setPositiveButton(android.R.string.ok, null); 
        builder.show(); 
        pinSetting.setChecked(false); 
        rtnval = false; 
       } 
       return rtnval; 
      } 
     }); 

即使當我輸入4位數字,我收到警告框,R.string.pin_alert_pin_not_set的消息,我認爲發生的事情是它總是轉到if (TextUtils.isEmpty(pinRetrieve.getText())),甚至當它不是空的時候。

我不能在EditBoxPreference上使用TextUtils.isEmpty(pinRetrieve.getText())?如果我可以,爲什麼它總是返回true,即使pinRetrieve.getText()不是空的?

謝謝

+0

爲什麼您的editext偏好是最終的? – user2450263

+0

試圖刪除最後。然後AndroidStudio說我不能在內部類'onPreferenceChange()'' – Sudara

回答

1

傳遞給onPreferenceChange(Preference preference, Object o)第二個參數是首選項的新值,你可以檢查,而不是使用EditTextPreference參考。您也可以刪除final關鍵字。並擺脫警告。所有你需要的是將o值賦給一個String。如果您的首選項是從xml文件添加的,您可以添加android:maxLength="4"屬性 - 這將不允許用戶在EditText中鍵入超過4個字符。

+0

謝謝:) if(TextUtils.isEmpty o.toString()))終於在工作。 – Sudara

0

文本實用程序類的IsEmpty函數接受一個字符序列作爲參數,並EditTextPreferences的GetText返回一個字符串。

而是嘗試

(TextUtils.isEmpty(new CharSequence(pinRetrieve.getText()))) 

字符串實現的CharSequence接口。

您可以嘗試使用字符串類的子序列函數,它將返回一個charsequence。

String pin = pinRetrievce.getText(); 
CharSequnce pinSequence = pin.subSequence(0, pin.length()); 
(TextUtils.isEmpty(pinSequence) 
+0

'使用'EditBoxPreference'試過了,謝謝。但它說'charSequence是抽象的,不能被實例化::( – Sudara

+0

您可以使用字符串pinSequence = pin.subSequence(0,pin.length())。toString(); – PieterAelse

相關問題