2012-03-17 7 views
14

यह मेरा कोडसूचीदृश्य notifydatasetchanged() फोन

listview =(ListView) findViewById(R.id.lv1); 


    ArrayList<SClass> Monday = new ArrayList<SClass>(); 

    SClass s1=new SClass(); 
    s1.sName="samp"; 
    s1.salary=1000; 
    Monday.add(s1); 
    temp=Monday; 
    adapter = new CustomAdap(this, temp); 
    listview.setAdapter(adapter); 

उपरोक्त कोड ठीक है.पर काम करता है जब मैं इस

listview =(ListView) findViewById(R.id.lv1); 


    adapter = new CustomAdap(this, temp); 

    SClass s1=new SClass(); 
    s1.sName="samp"; 
    s1.salary=1000; 
    Monday.add(s1); 
    temp=Monday; 

    listview.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 

सूची दृश्य करने के लिए अपने कोड बदलने कुछ भी दिखाई नहीं देता के साथ अद्यतन करने नहीं समस्या यह है?

+0

अगर आप CustomAdap और सोमवार के लिए स्रोत की आपूर्ति की है, साथ ही जहां सोमवार को घोषित किया जाता है तो यह स्पष्ट हो जाएगा। – louielouie

+0

मैंने कस्टमडैप के लिए कोड जोड़ा है और सोमवार एससीएलएएस –

+0

@ तारिक इब्राहिम की एक ऐरेलिस्ट है जो आप देख सकते हैं http://stackoverflow.com/questions/28148618/listview-not-refreshing-after-click-on-button –

उत्तर

17

ऐसा लगता है कि आप उस संग्रह को बदल रहे हैं जिसके साथ आपने एडाप्टर प्रारंभ किया था। मैं इस तरह से अपने कोड बदल जाएगा:

// initial setup 
listview =(ListView) findViewById(R.id.lv1); 
ArrayList<SClass> Monday = new ArrayList<SClass>(); 
adapter = new CustomAdap(this, Monday); 
listview.setAdapter(adapter); 

// change your model Monday here, since it is what the adapter is observing 
SClass s1=new SubjectClass(); 
s1.sName="samp"; 
s1.salary=1000; 
Monday.add(s1); 

// notify the list that the underlying model has changed 
adapter.notifyDataSetChanged(); 

ध्यान दें कि यदि आपका CustomAdap ArrayAdapter का एक उपवर्ग था, आप भी कर सकते थे

// change your array adapter here 
SClass s1=new SubjectClass(); 
s1.sName="samp"; 
s1.salary=1000; 
adapter.add(s1); 

// notify the list that the underlying model has changed 
adapter.notifyDataSetChanged(); 

संपादित करें: मैं और अधिक समझ अब तुम क्या करना चाहते हैं आपकी टिप्पणी के लिए धन्यवाद। आप शायद एडाप्टर को अपनी सामग्री को उस जगह के साथ बदलकर रखना चाहते हैं। मैं आपके कस्टमएडैप को ऐरेएडाप्टर का उप-वर्ग बना दूंगा।

तो फिर तुम इसे इस तरह का उपयोग कर सकते हैं:

// replace the array adapters contents with the ArrayList corresponding to the day 
adapter.clear(); 
adapter.addAll(MONDAY); 

// notify the list that the underlying model has changed 
adapter.notifyDataSetChanged(); 
+0

मेरा उद्देश्य temp का उपयोग करना है क्योंकि, मेरे पास अलग-अलग सरणी हैं, सोमवार मंगलवार आदि।मैं अलग-अलग दिनों में डिस्प्ले की अलग-अलग सामग्री की प्रतिलिपि बनाना चाहता हूं, यही कारण है कि मैं एक सरणीसूची temp.and का उपयोग करता हूं और temp को किसी भी सरणीसूची से सोमवार, tuesday इत्यादि से मूल्यों को आवंटित किया जा सकता है –

+0

कोई तरीका नहीं है जिसे addAll –

+2

आपका कस्टमएडैप कहा जाता है ArrayAdapter को उपclass करना होगा, जिसमें 'स्पष्ट' और 'addAll' शामिल है। कुछ 'सार्वजनिक वर्ग कस्टमएडैप' जैसे ऐरेएडाप्टर 'बढ़ाता है। संदर्भ के लिए कृपया http://developer.android.com/reference/android/widget/ArrayAdapter.html देखें। – louielouie

5

यह पहले कोड में क्यों काम करता है?

--- क्योंकि आप temp सूची के लिए मूल्यों की स्थापना और यह adapter गुजर और यह listview में यह पता चलता है कर रहे हैं।

दूसरे कोड में क्यों काम नहीं करते?

--- क्योंकि आप अस्थायी दूर एडाप्टर इससे पहले कि आप अस्थायी
दूसरे में मान सेट सेट कर रहे हैं, अपने एडाप्टर वर्ग अद्यतन मूल्य नहीं मिल रहा है हो सकता है जब आप क्योंकि ..that अस्थायी करने के लिए नए मान सेट temp कक्षा स्तर पर नहीं है या स्थिर नहीं है .. रूट स्तर पर अस्थायी घोषणा दें और कोशिश करें।

और अगर आपको कोई चेतावनी मिल रही है तो कृपया अपना पूरा कोड जितना आवश्यक हो और लॉगकैट दिखाएं।

+0

आपका क्या मतलब है रूट स्तर से? –

+0

मेरा मतलब कक्षा/गतिविधि स्तर पर कहना है .. – MKJParekh

+1

@MKJParekh अच्छा स्पष्टीकरण। यह मेरी मदद की। धन्यवाद –

4

उचित संदर्भ फ़ाइल में अपने संदर्भित दृश्य के लिंक की जांच करें। या कम से कम कहा गया एक्सएमएल फ़ाइल के अस्तित्व की जांच करें।

3

आप किस एडाप्टर का उपयोग कर रहे हैं? यह स्पष्ट रूप से एक ऐसा मामला है जहां आपके टेम्पलेट चर में डेटा सेट करने के बाद आपका एडाप्टर अपडेट नहीं हो रहा है।

+0

तो हम इसे कैसे प्राप्त कर सकते हैं? –

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