5

प्राप्त करने में कठिनाई के बाद ArrayAdapter साथ ListView पुनर्स्थापित करने के लिए मैं एक ListAdapter उपयोग कर रहा हूँ इस तरह एक ListView पॉप्युलेट करने के लिए:डेटा

static final String[] PROBLEMS = new String[] {"one", "two", "three" }; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState);   

    setListAdapter(new ArrayAdapter<String>(this, R.layout.my_problems, PROBLEMS)); 

    ListView lv = getListView(); 
    lv.setTextFilterEnabled(true); 

और उसके बाद मैं अपने सर्वर से एक दूरस्थ कॉल के लिए अधिक डेटा प्राप्त करने के लिए कर रहा हूँ वह AsyncTask कॉल के साथ सूचीबद्ध है, और जब मुझे सर्वर से डेटा वापस मिल जाता है तो मुझे नहीं पता कि ListView को कैसे पॉप्युलेट और रीसेट करना है।

@Override 
    protected void onPostExecute(String result) 
    {  
      // Unwrap the stuff from the JSON string     
      String problem_title = null; 
      String problem_id = null; 

      try 
      { 
       JSONArray obj = new JSONArray(result); 
       JSONObject o = obj.getJSONObject(0);      

       Log.d("Title: " , "" + o.getString("problem_title"));  
       Log.d("id: " , "" + o.getString("problem_id"));  

       problem_title = o.getString("problem_title"); 
       problem_id = o.getString("problem_id"); 
      } 
      catch (Exception e) 
      { 
      } 

      // Now not sure what to do :) 
      // How do I reset the list that I had set up above? 
       } 

मैं सूची पुनर्स्थापित करने के लिए उचित रूप से व्यवस्थित डेटा में परिणाम कर सकते हैं, लेकिन लगता है कि कैसे किया जाता है नहीं: अब तक मैं कुछ इस तरह की है। क्या कोई मदद कर सकता है? :)

उत्तर

16

मैं इसे इस तरह से उपयोग करते हैं,

values = new ArrayList<String>(); 
    //put anything you want in values as start 
    adapter = new ArrayAdapter<String>(this,R.layout.notification, values); 
    setListAdapter(adapter); 
तो

//change values array with your new data then update the adapter 
    adapter.notifyDataSetChanged(); 

तो सूचीदृश्य सामग्री समय में बदल जाएगा तो आप इस समारोह

+0

यह कैसे चला गया :) – GeekedOut

+0

आह ठीक है, यह संकलन है मैं आपको बता दूँगा मुझे लगता है कि अब कोशिश करते हैं ...! धन्यवाद! – GeekedOut

+0

कोई समस्या नहीं, शुभकामनाएं –

3
adapter.notifyDataSetChanged(); 

निष्पादित अच्छा विकल्प है ऐसा करने के लिए, लेकिन कभी-कभी वह काम नहीं करता जैसा हमें चाहिए। उस स्थिति में आप फिर से सेटैडाप्टर कर सकते हैं और आपकी सूची दृश्य ताज़ा हो जाता है। लेकिन यह करने का अच्छा विकल्प नहीं है क्योंकि यह फिर से संपूर्ण सूचीदृश्य को रेखांकित करता है, इसलिए यह कारण बहुत कम प्रदर्शन करता है। और आपका ऐप धीमा हो जाता है।

7

यदि आप केवल डेटा सेट को बदलना चाहते हैं तो आपको एडाप्टर को फिर से शुरू करने की आवश्यकता नहीं है। निम्नलिखित कोड का प्रयास करें -

adapter.clear(); 
for(int i = 0;i<categoriesArray.length;i++){ 
    adapter.add(categoriesArray[i]); 
} 
उसके बाद

यदि आवश्यक हो, आप एडाप्टर के लिए परिवर्तन भी सूचित कर सकते हैं, हालांकि यह आवश्यक नहीं होना चाहिए।

adapter.notifyDataSetChanged(); 

यदि आप एपीआई स्तर 11 या ऊपर लक्षित कर रहे हैं, तो आप एडाप्टर पर addAll() विधि का उपयोग कर सकते हैं। चूंकि यह अधिक कुशल है।

adapter.clear(); 
adapter.addAll(categoriesArray); 
संबंधित मुद्दे