2010-03-29 14 views
13

Có ai có mã mẫu để xác thực văn bản đã nhập của người dùng trong tùy chọn không? Ví dụ: tôi có EditTextPreference để người dùng nhập địa chỉ email. Tôi muốn xác thực định dạng địa chỉ email đã nhập và bật lên hộp thoại cảnh báo nếu định dạng không chính xác. Bất cứ ai có bất kỳ mã mẫu cho điều này? Cảm ơnLàm cách nào để bạn xác thực định dạng và giá trị của EditTextPreference được nhập trong Android 2.1?

Trả lời

10

Thực hiện Preference.OnPreferenceChangeListener

boolean onPreferenceChange (ưu tiên Preference, Object newValue)

Được gọi khi một Preference đã được thay đổi bởi người sử dụng. Điều này được gọi trước khi tiểu bang ưu tiên sắp được cập nhật và trước khi tiểu bang được duy trì.

Trả về Đúng để cập nhật trạng thái của Tùy chọn với giá trị mới.

Vì vậy, bạn có thể trực tiếp trả về kết quả xác thực giá trị.

public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
     findPreference("mail_preference_key").setOnPreferenceChangeListener(
      new Preference.OnPreferenceChangeListener() { 

      @Override 
      public boolean onPreferenceChange(Preference preference, Object newValue) { 
       return Pattern.matches("mailPattern", (String) newValue); 
      } 

     }); 
    } 
} 
+0

Tôi có đoạn mã sau: \t \t if (key.equals ("update_delay")) { \t \t \t Chuỗi newvalue = sp.getString (key, null) ; .. \t \t \t if (Integer.parseInt (newvalue) <60) \t \t \t \t sp.edit() putString ("update_delay", "60") cam kết(); } và lần sau tôi nhấp vào EditTextPreference nó vẫn hiển thị giá trị thấp. Bạn có biết nếu commit() không hoạt động trong ngữ cảnh này không? – sargas

+0

Tôi không chắc chắn, nhưng trong cam kết phương pháp tham khảo nói 1. Lưu ý rằng khi hai biên tập viên đang sửa đổi tùy chọn cùng một lúc, người cuối cùng gọi cam kết thắng. 2. Trả về true nếu các giá trị mới được ghi thành công thành lưu trữ liên tục. Điểm 1: Có thể trình chỉnh sửa người dùng thực hiện cuộc gọi cuối cùng. Điểm 2: Kiểm tra xem commit có trả về true không. Hy vọng sự trợ giúp này. – Fede

+1

Điều này không được gọi sau khi thay đổi được thực hiện? Tôi cho rằng @Aaron có câu trả lời đúng. – iozee

2

Tôi muốn sử dụng Preference.OnPreferenceChangeListener hơn SharedPreferences.OnSharedPreferenceChangeListener.

Trước đây cho phép bạn xác thực giá trị mới trước khi nó được duy trì (và ngăn không cho nó tiếp tục tồn tại) thay vì sau.

9

Câu hỏi của bạn là một hit đầu tiên của Google khi tôi cố gắng làm điều tương tự, vì vậy hy vọng điều này sẽ giúp một người nào đó. Đây là một cái gì đó tôi đã tấn công với nhau ngày hôm nay để chứng minh OnPreferenceChangeListener, do đó cho phép bạn dừng những thay đổi không hợp lệ.

trong đoạn của bạn:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 

     Your_Pref = (EditTextPreference) getPreferenceScreen().findPreference("Your_Pref"); 

     Your_Pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

      @Override 
      public boolean onPreferenceChange(Preference preference, Object newValue) { 
       Boolean rtnval = true; 
       if (Your_Test) { 
        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
        builder.setTitle("Invalid Input"); 
        builder.setMessage("Something's gone wrong..."); 
        builder.setPositiveButton(android.R.string.ok, null); 
        builder.show(); 
        rtnval = false; 
       } 
       return rtnval; 
      } 
     }); 
    } 
Các vấn đề liên quan