2011-04-23 21 views
8

मेरे पास मेरी गतिविधि में MultiAutoCompleteTextView विजेट है, जिसमें ArrayAdapter<String> है जो वेब-आधारित कॉल के परिणामस्वरूप आबादी वाला है। चूंकि उपयोगकर्ता टेक्स्टव्यू में वर्णों में टाइप करता है, इसलिए इस एडाप्टर की सूची पृष्ठभूमि में अपडेट होनी चाहिए। इसे लागू करने का सबसे अच्छा तरीका क्या है?डायनामिक एडाप्टर परिवर्तनों के साथ मल्टीएटोकंपलेटटेक्स्ट व्यू

मैंने पहले से ही पृष्ठभूमि में तारों की सूची डाउनलोड करने के लिए AsyncTask का उपयोग करने का प्रयास किया है, लेकिन notifyDataSetChanged() को "गैर-प्रारंभिक धागे" से बुलाया जा रहा था। इसके अलावा, यह थोड़ा चौराहे लगता है।

अन्य विकल्प जो मैंने पार किया था वह है कि Filterable का उपयोग किया जा सकता है, लेकिन मुझे ऐसा करने के तरीके पर किसी भी साधारण उदाहरण (AutoComplete4 एक ओवरकिल की तरह लगता है) में नहीं आया है। यदि कोई उदाहरण नहीं है, तो क्या कोई ऐसे कलाकारों का विस्तृत अवलोकन दे सकता है जिनकी मुझे आवश्यकता होगी - फ़िल्टर, फ़िल्टर करने योग्य, आदि

क्या यह जाने का एक अच्छा तरीका भी है?

धन्यवाद,
Rajath

+0

आप किसी भी समाधान – user1767260

+0

मिला @ user1767260 है, यह हो गया है दो साल से अधिक:

यहाँ कुछ कोड है कि मैंने यह प्रश्न पोस्ट किया था; मुझे नहीं लगता कि मैंने इसका पीछा किया। – rajath

उत्तर

0

मैं जानता हूँ कि इस सवाल का वर्ष है, लेकिन मैं एक ही बात करना ही था और मैं सोचा मैं तुम्हारे साथ समाधान साझा करते हैं या किसी को भी यह आवश्यकता होगी।

सबसे पहले, आपको अपने डेटा को पुनर्प्राप्त करने के लिए वास्तव में AsyncTask का उपयोग करने की आवश्यकता होगी। यह कहा जा रहा है, मैं कभी भी एक AsyncTask किसी भी तरह से मेरी दृश्य कक्षा में हेरफेर नहीं देना होगा। इसके बजाए, मैं आपके AsyncTask में आवश्यक पैरामीटर के साथ कॉलबैक का उपयोग करना चाहता हूं। जैसे ही AsyncTask समाप्त हो जाता है, आप अपनी कॉलबैक विधि को कॉल करेंगे जो notifyDataSetChanged() पर कॉल करने के लिए जिम्मेदार होगा।

MyAsyncTask.java

public class MyAsyncTask extends AsyncTask<Object, Void, Object> { 

@Override 
protected String doInBackground(Object... params) { 
    MyController callbackClass = (MyController) params[0]; 

    // Get your other parameters and do your stuff here... 

    // Call the setter with the data you get back and refresh the view 
    // either here or implementing onPostExecute. 
    callbackClass.setMyData(myData); 
    callbackClass.refreshView(); 

    // Return any object if you need. 
    return null; 
} 
} 

MyCallbackClass.java

public MyCallbackClass extends Fragment{ 

    private List<MyDataType> myData; 

    private ArrayAdapter<MyDataType> myAdapter; 

    // Your methods including setters and getters. 

    public void refreshFriendList(){ 
    if(myAdapter == null){ 
     initAutoCompleteView(); 
    } 
    myAdapter.clear(); 
    myAdapter.addAll(myData); 
    myAdapter.notifyDataSetChanged(); 
    } 

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