Android TextWatcher.afterTextChanged बनाम TextWatcher.onTextChanged


121

मुझे किन परिस्थितियों afterTextChangedमें onTextChangedऔर इसके विपरीत उपयोग करना चाहिए ?

जवाबों:


199

इन घटनाओं को निम्नलिखित क्रम में कहा जाता है:

  1. पहले कस्टमचेंज्ड (CharSequence s, int start, int count, int after)
    इसका मतलब है कि पात्रों को कुछ नए पाठ के साथ प्रतिस्थापित किया जाना है। पाठ अप्राप्य है।
    उपयोग करें: जब आपको पुराने पाठ पर एक नज़र डालनी होगी जो बदलने वाला है।

  2. onTextChanged (CharSequence s, int start, int before, int count)
    परिवर्तन किए गए हैं, कुछ पात्रों को अभी बदल दिया गया है। पाठ अप्राप्य है।
    उपयोग करें: जब आपको यह देखना हो कि पाठ में कौन से अक्षर नए हैं।

  3. afterTextChanged (संपादन योग्य s)
    ऊपर जैसा ही है, अब केवल पाठ संपादन योग्य है
    उपयोग करें: जब आपको नया पाठ देखने और संपादित करने की आवश्यकता हो।

यदि मैं केवल परिवर्तनों के बारे में सुन रहा हूं EditText, तो मुझे पहले दो तरीकों का उपयोग करने की आवश्यकता नहीं होगी। मैं सिर्फ तीसरी विधि में नए मान प्राप्त करूंगा और यदि आवश्यक हो तो नए पाठ को सही कर सकता हूं। हालाँकि, अगर मुझे सटीक बदलावों को ट्रैक करना था, जो मूल्यों के साथ होते हैं, तो मैं पहले दो तरीकों का उपयोग करूंगा। यदि मुझे परिवर्तनों को सुनने के बाद पाठ को संपादित करने की आवश्यकता होती है, तो मैं तीसरी विधि में भी ऐसा करूंगा।


मुझे यह समझने में मदद की कि क्यों onTextChanged में पाठ बदलना ANR के लिए अग्रणी था।
सुखवीर सिंह

12

सार्वजनिक शून्य afterTextChanged (संपादन योग्य)

इस पद्धति को आपको सूचित करने के लिए कहा जाता है, कहीं न कहीं s, पाठ को बदल दिया गया है। sइस कॉलबैक से और परिवर्तन करना वैध है , लेकिन खुद को अनंत लूप में न लाने के लिए सावधान रहें, क्योंकि आपके द्वारा किए गए किसी भी परिवर्तन के कारण इस विधि को फिर से पुनरावृत्ति कहा जाएगा। (आप नहीं बताया जाता है जहां परिवर्तन हुआ है क्योंकि अन्य afterTextChanged () पद्धतियों पहले से ही अन्य परिवर्तन किए हों और ऑफसेट अवैध ठहरा दिया। लेकिन अगर आप यहाँ पता करने की जरूरत है, तो आप उपयोग कर सकते हैं setSpan(Object, int, int, int)में onTextChanged(CharSequence, int, int, int)अपनी जगह चिह्नित करने के लिए और फिर यहाँ कहाँ से ऊपर देखो स्पान समाप्त हो गया।

सार्वजनिक शून्य से पहले कस्टमचार्ज किए गए (CharSequence s, int start, int count, int after)

यह विधि आपको यह सूचित करने के लिए कहा जाता है कि, भीतर शुरू होने sवाले countवर्णों startको लंबाई के साथ नए पाठ द्वारा प्रतिस्थापित किया जाएगा aftersइस कॉलबैक से परिवर्तन करने का प्रयास करना एक त्रुटि है ।

सार्वजनिक शून्य onTextChanged (CharSequence s, int start, int before, int count)

यह विधि आपको यह सूचित करने के लिए कहा जाता है कि, भीतर शुरू होने sवाले countवर्णों startने केवल पुराने पाठ को बदल दिया है जिसकी लंबाई थी beforesइस कॉलबैक से परिवर्तन करने का प्रयास करना एक त्रुटि है ।

TextWatcher के लिए Android के संदर्भ से सही ।


आप एपीआई कोड की नकल क्यों करेंगे? कई बार एपीआई "मानव-अपठनीय" होता है।
मटुआ

@matua यह सवाल / जवाब 11 साल पहले का है।
ग्रेग जूल

तब टिप्पणियों को अवरुद्ध किया जाना चाहिए मुझे लगता है :)
मटुआ

0

Android Textwatcher एक तरह का ट्रिगर है जिसे इनपुट क्षेत्र के टेक्स्ट परिवर्तन पर कहा जाता है।

afterTextChanged (Editable s)- इस विधि को तब कहा जाता है जब पाठ को बदल दिया गया हो। क्योंकि आपके द्वारा किए गए किसी भी परिवर्तन के कारण इस विधि को फिर से पुन: कहा जा सकेगा, आपको यहाँ संचालन करने के बारे में सतर्क रहना होगा, अन्यथा यह अनंत लूप को जन्म दे सकता है ।

onTextChanged (CharSequence s, int start, int before, int count)- इस विधि को आपको सूचित करने के लिए कहा जाता है, जो s के भीतर, शुरुआत में शुरू होने वाले गिनती वर्णों ने पुराने पाठ को बदल दिया है जिसकी लंबाई पहले थी। इस कॉलबैक से s में परिवर्तन करने का प्रयास करना एक त्रुटि है।


6
दस्तावेज़ की प्रतिलिपि बनाएँ / चिपकाएँ मददगार नहीं है और इस सवाल का जवाब नहीं देता है।
डेविड वासर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.