2011-05-15 3 views
24

पर मुझे दोगुनी हो रही है मुझे एक संपादन टेक्स्ट नियंत्रण में कोई समस्या है। यह समस्या केवल इस विशेष गतिविधि और एडिटटेक्स के साथ कोई अन्य गतिविधियां नहीं हो रही है। मैंने इस संपादन टेक्स्ट के लिए सभी सेटटेक्स्ट कॉल हटा दिए हैं और समस्या अभी भी बनी हुई है।संपादित करें टेक्स्ट घुमाएं

मैं अपने मोबाइल डिवाइस पर एंड्रॉइड 2.3.4 चला रहा हूं। यह एक नेक्सस एस और चल रहा स्टॉक एंड्रॉइड है। एम्यूलेटर में (एंड्रॉइड 2.2 चल रहा है) यह समस्या नहीं होती है।

जब मैं फोन घुमाता हूं, तो एंड्रॉइड स्वचालित रूप से रोटेशन से पहले संपादन टेक्स्ट में मौजूद पाठ को प्रतिस्थापित करता है। मैं कुछ भी करने के लिए savedInstanceState का उपयोग नहीं कर रहा हूँ। एंड्रॉइड यह खुद कर रहा है।

मेरे समस्या:

शब्द "परीक्षण" मान लीजिए EditText में है। जब मैं फोन घुमाता हूं, तो एंड्रॉइड एडिटटेक्स्ट में "टेस्टटेस्ट" रखेगा जब गतिविधि फिर से बनाई जाएगी। यह केवल तब होता है जब मैं संपादन टेक्स्ट में टाइप करने के लिए वर्चुअल कीबोर्ड का उपयोग करता हूं, मैं वर्चुअल कीबोर्ड पर "किए गए" बटन पर क्लिक नहीं करता, मैं वर्चुअल कीबोर्ड को हटाने के लिए वापस दबाता हूं, और फिर मैं डिवाइस को घुमाता हूं। यदि मैं बैक बटन के बजाय "किया गया" बटन का उपयोग करता हूं, तो समस्या नहीं होती है।

कोई विचार? जैसा कि मैंने कहा, मैं पाठ सेट कर रहा हूं। सेटटेक्स्ट को कॉल करने वाली सभी पंक्तियों पर टिप्पणी की गई है।

अपडेट 1: मैंने ऑनक्रेट() विधि को छोड़कर इस गतिविधि में सबकुछ टिप्पणी की है। समस्या अभी भी हो रही है।

अद्यतन 2: मैंने एक नई गतिविधि बनाई है। इस ब्रांड की नई गतिविधि में केवल एक ऑन्रेट() विधि है। ऑनक्रेट() विधि में एकमात्र चीज सेट करने के लिए एक कॉल है CONTontView (एक ही लेआउट फ़ाइल का उपयोग करता है) और सुपर के ऑनक्रेट() को कॉल करना। समस्या अभी भी बनी हुई है। मैं उलझन में हूं। एकमात्र चीज जो मैं अनुमान लगा सकता हूं वह लेआउट फ़ाइल के साथ कुछ है। मुझे नहीं पता कि यह क्या होगा।

अपडेट 3: मैंने संपादन टेक्स्ट को छोड़कर लेआउट से सबकुछ हटा दिया है। समस्या अभी भी हो रही है।

+0

editText.append() के बारे में क्या? क्या आप ऐसी चीज का उपयोग करते हैं? यदि ऐसा है तो आपको उन्हें – dds

+0

अक्षम करना चाहिए यदि आप कॉन्फ़िगरेशन परिवर्तन पर एडिटटेक्स्ट सामग्री को स्टोर करना चाहते हैं, तो मैं [onRetainNonConfigurationInstance] का उपयोग कर रहा हूं (http://developer.android.com/reference/android/app/Activity.html# onRetainNonConfigurationInstance% 28% 2 9) सफलतापूर्वक अब तक। उदाहरण के लिए आप इस विधि से अपनी संपादन टेक्स्ट सामग्री स्ट्रिंग वापस कर सकते हैं।और आप इसे [getLastNonConfigurationInstance] (http://developer.android.com/reference/android/app/Activity.html#getLastNonConfigurationInstance%28%29) का उपयोग करके अपने ऑनक्रेट पर पुनर्प्राप्त कर सकते हैं, यदि कोई सहेजा गया डेटा उपलब्ध नहीं है तो शून्य हो जाता है। – harism

+0

क्या आपने भौतिक डिवाइस के साथ प्रयास किया है? अपना एडीके अपडेट किया गया? ईमानदारी से, आपके एमुलेटर के साथ एक बग की तरह लगता है। –

उत्तर

-1

रोटेशन को संभालने के लिए अपने आप को अपने प्रकट android:configChanges जोड़ने परिवर्तन:

 <activity 

     android:name="yourActivity" 
     android:configChanges="orientation"></activity> 
+0

मैंने कोशिश की और यह अभी भी मुझे कुछ भी किए बिना पाठ को बदल देता है। – Andrew

+0

समस्या को ठीक नहीं करता है। – vaughandroid

13

मैं एक ऐसी ही समस्या थी, लेकिन मैं केवल यह देखने के लिए जब स्वत: पूर्ण EditText के लिए चालू है।

मेरा काम स्वतः पूर्ण अक्षम करना था। <EditText . . . android:inputType="textMultiLine|textNoSuggestions" />

+1

बढ़िया, यह मेरे लिए काम किया। बहुत बहुत धन्यवाद। – Ridcully

+3

यह कुछ बकवास है कि यह काम करता है। – MinceMan

+0

यह बग अभी भी एंड्रॉइड 4.0.3 पर मौजूद है, लेकिन यह फिक्स काम करता है। लेकिन मैं वास्तव में अपने उपयोगकर्ताओं को स्वत: पूर्ण पेशकश करने में सक्षम होना चाहता हूं ... – JDJ

2

मैं एक काम के साथ आया जिसकी आप कोशिश कर सकते थे। यह एडिटटेक्स्ट को उपclassing द्वारा काम करता है, कुछ घटनाओं को पकड़ता है और उसके बाद केवल उस पाठ परिवर्तन को स्वीकार करता है जो कुंजीपटल दिखाए जाने पर होता है, जिसे उपयोगकर्ता द्वारा टाइप किए गए किसी भी बदलाव को फ़िल्टर करना चाहिए। मुझे अभी भी पता नहीं है कि यह क्या हो सकता है।

static class CustomEditText extends EditText{ 
    boolean keyboardHidden = true; 
    String mText = null; 
    public CustomEditText(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    public CustomEditText(Context context, AttributeSet attr) { 
     super(context, attr); 
     // TODO Auto-generated constructor stub 
    } 

    //This gets called for any text field change, regardless of where the change comes from 
    //When the phone flips and tries to double the text we can catch it. 
    //If the keyboard is hidden (meaning the user isn't typing anything) the strings should match 
    protected void onTextChanged(CharSequence text, int start, int before, int after){ 

     if(keyboardHidden && mText!=null && !text.toString().equals(mText)){ 
      setText(mText); 
      setSelection(mText.length()); 
     } 
     else 
      mText = text.toString(); 
    } 

    //There's no way right now to directly check if the soft keyboard is displayed 
    //On touch, the soft keyboard is displayed by default for EditText, so assume the keyboard is displayed from this point on 
    public boolean onTouchEvent(MotionEvent event){ 
     keyboardHidden = false; 
     super.onTouchEvent(event); 
     return true; 
    } 

    //On a back press we're removing the soft keyboard so set the flag back to true 
    public boolean dispatchKeyEventPreIme(KeyEvent event){ 
     if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){ 
      keyboardHidden = true; 
     } 
     return super.dispatchKeyEvent(event); 
    } 

} 
+0

धन्यवाद - मुझे यह समाधान पसंद है! मैं केवल यह जोड़ना चाहता हूं कि यदि आप कुंजीपटल को "पूर्ण" कार्रवाई पर कीबोर्ड को छिपाने का निर्णय लेते हैं, तो आप उसी समय कीबोर्डहिड = सत्य सेट कर सकते हैं। – Nims