2011-09-17 13 views
13

मेरे पास मेरे लेआउट में एक AutoCompleteTextView है। मेरे पास AutoCompleteTextView में मौजूद वही आइटम चुनने का एक वैकल्पिक तरीका भी है।जब पाठ प्रोग्रामेटिक रूप से सेट किया जाता है तो मैं स्वत: पूर्ण ड्रॉपडाउन से कैसे बच सकता हूं?

autoCompleteTextView.setText(valueFromAlternativeSource); 

जहां valueFromAlternativeSource वैध स्वत: पूर्ण विकल्पों में से एक है: जब वैकल्पिक तरीका चुना जाता है, मैं के माध्यम से AutoCompleteTextView में मान। इसके साथ समस्या यह है कि सेटटाक्स्ट कहा जाता है जब स्वत: पूर्ण ड्रॉपडाउन प्रकट होता है। इसके बाद के संस्करण के बाद निम्नलिखित लाइन डालने से काम नहीं करता:

autoCompleteTextView.dismissDropDown(); //Doesn't work. Why? 

क्यों लटकती खारिज पर कोई भी विचार नहीं कर रहा है या अन्य तरीकों से मैं लटकती खारिज कर सकता है?

autoCompleteTextView.setText(valueFromAlternativeSource); 
autoCompleteTextView.setDropDownHeight(0); 

autoCompleteTextView.setOnKeyListener(new OnKeyListener(){ 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     autoCompleteTextView.setDropDownHeight(LayoutParams.WRAP_CONTENT); 
    } 
} 
+1

आपका समाधान काम नहीं करता है क्योंकि setText (CharSequence) विधि एसिंक्रोनस काम शुरू करती है। जब भी टेक्स्ट बदलता है, तो एडाप्टर का फ़िल्टर दिखाने के लिए संभावित प्रस्तावों के लिए फ़िल्टर करने के लिए उपयोग किया जाता है। चूंकि फ़िल्टर में काफी समय लग सकता है, इसे असीमित रूप से कहा जाता है। कुछ समय बाद फ़िल्टर वापस आता है और यूआई थ्रेड फिर से प्रोसेसिंग करते समय इसके परिणाम प्रदर्शित होते हैं। इस समय इस समय डिलिवरीड्रॉपडाउन() विधि पूरी हो चुकी है - यही कारण है कि इस विधि का कोई प्रभाव नहीं पड़ता है। " स्रोत: http://www.grokkingandroid.com/how-androids-autocompletetextview-nearly-drove-me -नट्स/ – Singed

उत्तर

2

मेरे समाधान (लेकिन मैं इसे पसंद नहीं है, वहाँ बेहतर कुछ होना चाहिए)। मेरा काम के आसपास इस तरह दिखता है:

//autoCompleteTextView.dismissDropDown(); 
new Handler().post(new Runnable() { 
    public void run() { 
     autoCompleteTextView.dismissDropDown(); 
}}); 
7

आदेश कैसे संदेशों कार्रवाई की जाती है की अपनी एक समस्या की तरह लग रहा:

9

यह मेरे लिए ठीक काम करता है और कम जटिल है:

ListAdapter adapter = autoCompleteTextView.getAdapter(); 
autoCompleteTextView.setAdapter(null); 
autoCompleteTextView.setText("whatever"); 
autoCompleteTextView.setAdapter(adapter); 
2
autoCompleteTextView.setText(valueFromOtherMeans, filter); 

    * @param filter If <code>false</code>, no filtering will be performed 
    *  as a result of this call. 
+0

यदि आप अपने उत्तर में कुछ प्रोसा जोड़ते हैं तो यह अच्छा होगा। – faceman

+2

केवल एपीआई 17+, बीटीडब्ल्यू –

+0

@faceman के लिए काम करता है क्यों कुछ होमवर्क नहीं कर रहा है? – drindt

7

आप एपीआई < 17, उपवर्ग AutoCompleteTextview का समर्थन और setText(text, filter) विधि ओवरराइड करने के लिए चाहते हैं

@Override 
public void setText(CharSequence text, boolean filter) { 
    if(Build.VERSION.SDK_INT>=17) { 
     super.setText(text, filter); 
    }else{ 
     if(filter){ 
      setText(text); 
     }else{ 
      ListAdapter adapter = getAdapter(); 
      setAdapter(null); 
      setText(text); 
      if(adapter instanceof ArrayAdapter) 
       setAdapter((ArrayAdapter) adapter); 
      else 
       setAdapter((CursorAdapter) adapter); 
      //if you use more types of Adapter you can list them here 
     } 
    } 
} 

फिर जब भी आप सेट करना चाहते हैं पाठ मैन्युअल रूप से setText(text, false)

+0

एपीआई के लिए यहां सबसे अच्छा जवाब <17 समर्थन! – Petro

+0

नहीं सुनिश्चित करें कि यह स्वीकार्य उत्तर क्यों नहीं है। – northernman

संबंधित मुद्दे

 संबंधित मुद्दे