2012-10-02 12 views
5

ट्रिगर करने के लिए 'एंटर कुंजी' को रोकें मैं दूरस्थ कीबोर्ड के रूप में कार्य करने के लिए एक एप्लिकेशन बना रहा था, जहां उपयोगकर्ता एक संपादन पर क्लिक करेगा और टाइप और संबंधित वर्णमाला कंप्यूटर में टाइप किए जाएंगे।TextWatcher

मुझे टेक्स्टवॉचर की मदद से भारी वर्णमाला और संख्याएं मिली हैं और उन्हें सफलतापूर्वक मेरे सर्वर पर भेज दिया गया है।

समस्या तब होती है जब उपयोगकर्ता कुंजी दर्ज करता है। यह TextWatcher भी ट्रिगर करता है। और चूंकि मैं नवीनतम दर्ज किए गए परिवर्तन भेज रहा हूं, सर्वर सर्वर पर त्रुटि दिखाई देती है।

एक समाधान मैं क्या किया था, onkeylistener एक onkeylistener सेट के साथ-साथ जो कुंजी दर्ज करें और कार्रवाई और प्रदर्शन की पहचान करेगा यह उपभोग करते हैं, लेकिन दुर्भाग्य से उस मामले में भी पहले textwatcher ट्रिगर किया जाता है और उसके बाद।

private TextWatcher watcher = new TextWatcher() { 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if(count>0){ 
     out.println(":"+s.subSequence(start, start+count).toString()); 
     } 
    } 
      . 
      . 
      . 

समस्या दबाने में प्रवेश कुंजी यह TextWatcher के onTextChanged आग के साथ-साथ onkeylistener पर है:

यहाँ मेरी onkeylistener

keyboard.setOnKeyListener(new OnKeyListener() {     
    public boolean onKey(View v, int keyCode, KeyEvent event) {     
    if(keyCode == KeyEvent.KEYCODE_ENTER&&event.getAction()==KeyEvent.ACTION_UP){ 
        out.println("enter"); 
       return true; 
       } 
     return false; 
      } 
    }); 

TextWatcher संहिता के कोड है। जबकि मैं केवल मुख्य श्रोता को आग लगाना चाहता हूं। मैं अक्षरों, संख्याओं, कुछ प्रतीकों इत्यादि के मामले में केवल टेक्स्टवॉचर को आग लगाना चाहता हूं

यदि आप पात्रों (मुलायम) को पहचानने और भेजने के लिए अलग-अलग दृष्टिकोण सुझा सकते हैं तो भी बहुत अच्छा होगा।

+0

मैंने भी cond को डालने की कोशिश की। टेक्स्टवॉचर के अंदर यह जांचने के लिए कि क्या नवीनतम परिवर्तन में गैर-अल्फान्यूमेरिक चार है। अगर ऐसा होता है तो यह बाहर नहीं निकलता है .println()। लेकिन यह भी काम नहीं करता है। यह अभी भी एंटर कुंजी का पता लगाता है और अगर cond को निष्पादित करता है और निष्पादित करता है .println()। – PrateekArora

+0

ठीक है मुझे लगता है कि मैंने इसे हल किया है। Textwatcher में यह कथन जोड़ें: यदि (s.toString()। substring (प्रारंभ) .contains ("\ n")) इस तरह से अगर अंतिम कुंजी दर्ज की गई 'एंटर' थी तो यह उस में जाएगी और फिर आप जो भी आप चाहते हैं कर सकते हैं। – PrateekArora

उत्तर

1

ठीक है मुझे लगता है कि मैंने इसे हल किया है। कि रास्ते में

if(s.toString().substring(start).contains("\n")) 

अगर पिछले कुंजी दर्ज किया गया था 'दर्ज' तो यह जाना होगा में इस है और फिर यू प्रदर्शन कर सकते हैं जो कुछ भी यू चाहते हैं: Textwatcher में यह अगर बयान जोड़ें।