2011-10-25 57 views
7

Hãy tưởng tượng tôi có 5 EditText và tôi cần điền các giá trị khi một giá trị edittext được thay đổi. Các giá trị là phụ thuộc lẫn nhau. Tôi đang sử dụng logic sau để đạt được điều đó.Cách xử lý EditText Change Listener trong android

//Finding which edit text is originating values 

for(int i=0;i<mEditTextIds.length;i++){ 
     txt[i]=(EditText) findViewById(mEditTextIds[i]); 
     txt[i].setOnTouchListener(new EditTextTouchLisner()); 
     txt[i].setId(i); 
} 


//Enable that Edittext's TextChangeListner and disabling all other Edittext's TextChangeListner .. 

if (event.getAction() == MotionEvent.ACTION_DOWN){ 
    for(int i=0;i<mTableRowIds.length;i++){ 
     if(i!=v.getId()){ 
      txt[i].addTextChangedListener(null); 
     }  
    } 
    txt[v.getId()].addTextChangedListener(new TextChangedListner()); 


//calculating values 

@Override 
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
    //calculate(); 
    Toast.makeText(getApplicationContext(), "CHANGED", Toast.LENGTH_SHORT) .show(); 
} 

Nhưng nếu tôi nhấn EditText lần thứ hai tôi nhận được các lỗi sau đây:

10-25 16:23:05.149: ERROR/AndroidRuntime(2378): FATAL EXCEPTION: main 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378): java.lang.NullPointerException 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at android.widget.TextView.sendBeforeTextChanged(TextView.java:6116) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at android.widget.TextView.access$700(TextView.java:187) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at android.widget.TextView$ChangeWatcher.beforeTextChanged(TextView.java:6309) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at android.text.SpannableStringBuilder.sendTextWillChange(SpannableStringBuilder.java:878) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:279) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:409) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:28) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:583) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:384) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:292) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:73) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at android.os.Looper.loop(Looper.java:123) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at java.lang.reflect.Method.invoke(Method.java:521) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
10-25 16:23:05.149: ERROR/AndroidRuntime(2378):  at dalvik.system.NativeStart.main(Native Method) 

Trả lời

0

Để loại bỏ Textchangelistener

txt [i] .removeTextChangedListener (sát);

15

Thay vì thực hiện EditTextTouchLisner, bạn có thể thực hiện addTextChangedListener để EditText của bạn.

addTextChangedListener mất TextWatcher đối tượng như một cuộc tranh cãi

Đây là một Help With TextWatcher

+0

tôi đã làm điều tương tự (xem đoạn thứ hai của mã) ... nếu tôi intially thêm addTextChangedListener sau đó tất cả các văn bản chngelistner sẽ chồng lên nhau không? .. wht u nói? – vnshetty

+0

@Paresh Mayani: Tôi đã trả lời giống như bạn đã làm, nhưng tôi cũng không tìm ra, làm thế nào anh ta có thể biết 'EditText' nào đang được thay đổi .. – Hiral

+0

@ Hiral Có điều đó quan trọng..Im đạt được nó bằng cách nhấp vào sự kiện – vnshetty

0

gì về lưu trữ EditText với sự tập trung và, bên trong người nghe thay đổi, thực hiện hoạt động chỉ nếu quan điểm cho rằng tạo sự kiện thay đổi bằng một trong những người đã tập trung?

Thực hiện việc này, không cần phải đính kèm, tách và kết nối lại trình nghe.

Chỉ cần 2 cent của tôi ...

+0

Tuyệt vời ... nhưng tôi có Thiết kế giao diện người dùng khác .. cảm ơn tôi đã giải quyết được sự cố của mình ... – vnshetty

0

Tôi có vấn đề này tương tự nhưng trong trường hợp của tôi có một nguyên nhân khác nhau:

tôi thêm textChangedListener để EditText tôi trước khi tôi khởi tạo các TextChangedListener

vì vậy tôi đã này:

filterText.addTextChangedListener(filterTextWatcher); 
filterTextWatcher = new NavigationTextWatcher(adapter); 
setListAdapter(adapter); 

thay vì:

filterTextWatcher = new NavigationTextWatcher(adapter); 
filterText.addTextChangedListener(filterTextWatcher); 
setListAdapter(adapter); 
Các vấn đề liên quan