2011-10-25 14 views
7

में एडिटटेक्स्ट चेंज श्रोता को कैसे संभालता है कल्पना कीजिए कि मेरे पास 5 एडिटटेक्स्ट है और मुझे एक संपादन मूल्य बदलते समय मूल्यों को पॉप्युलेट करने की आवश्यकता है। मूल्य परस्पर निर्भर हैं। मैं इसे प्राप्त करने के लिए निम्नलिखित तर्क का उपयोग कर रहा हूं।एंड्रॉइड

//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(); 
} 

लेकिन अगर मैं दूसरी बार मैं निम्नलिखित त्रुटियाँ प्राप्त edittext पर क्लिक करें:

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) 

उत्तर

0

Textchangelistener निकालने के लिए

txt [i] .removeTextChangedListener (द्रष्टा);

15
इसके बजाय EditTextTouchLisner को लागू करने की

, आप addTextChangedListener अपने EditText को लागू कर सकते हैं।

addTextChangedListener एक तर्क

यहाँ के रूप में TextWatcher वस्तु लेता है एक Help With TextWatcher

+0

मैंने एक ही काम किया (कोड का दूसरा खंड देखें) ... यदि मैं आंशिक रूप से addTextChangedListener जोड़ता हूं तो सभी ग्रंथों में chngelistner एक दूसरे को ओवरलैप करेगा? .. आप क्या कहते हैं? – vnshetty

+0

@ परेशेश मायानी: मैंने वही जवाब देना था जैसा आपने किया था, लेकिन मुझे यह भी पता नहीं चला कि वह कैसे जान पाएगा कि 'एडिटटेक्स्ट' किस प्रकार बदला जा रहा है .. – Hiral

+0

@ हिरल हां यह महत्वपूर्ण है .. आईएम क्लिक इवेंट – vnshetty

0

क्या ध्यान देने के साथ EditText भंडारण और परिवर्तन श्रोता के अंदर, के बारे में, आपरेशन केवल तभी विचार है कि परिवर्तन घटना उत्पन्न के बराबर है करता है जिसने फोकस किया है?

ऐसा करने के लिए, श्रोता को संलग्न करने, अलग करने और दोबारा जोड़ने की आवश्यकता नहीं है।

बस मेरे 2 सेंट ...

+0

द्वारा इसे प्राप्त करना उत्कृष्ट ... लेकिन मेरे पास अलग यूआई डिज़ाइन है .. धन्यवाद मैंने अपनी समस्या हल की है ... – vnshetty

0

मैं इस एक ही समस्या थी, लेकिन मेरे मामले में एक अलग कारण नहीं था:

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

मैं इससे पहले कि मैं TextChangedListener

तो मैं इस किया था प्रारंभ मेरी EditText को textChangedListener जोड़ा

के बजाय:

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