रोमेन लड़का explained a while backGoogle I/O session, केवल एक सूची दृश्य में एक दृश्य को अपडेट करें सबसे कारगर तरीका दौरान निम्नलिखित की तरह कुछ (यह एक अद्यतन पूरे दृश्य डेटा) है के रूप में:
ListView list = getListView();
int start = list.getFirstVisiblePosition();
for(int i=start, j=list.getLastVisiblePosition();i<=j;i++)
if(target==list.getItemAtPosition(i)){
View view = list.getChildAt(i-start);
list.getAdapter().getView(i, view, list);
break;
}
target
मानते हैं कि एडाप्टर का एक आइटम है।
इस कोड ListView
पुनः प्राप्त है, तो वर्तमान में दिखाए गए दृश्य ब्राउज़ करें, target
आइटम आप प्रत्येक के साथ दृश्य आइटम प्रदर्शित करने के लिए देख रहे हैं की तुलना करें और यदि आपका लक्ष्य उन लोगों के बीच है, संलग्न दृश्य प्राप्त और उस पर अनुकूलक getView
निष्पादित प्रदर्शन को रीफ्रेश करने के लिए देखें।
एक तरफ ध्यान दें invalidate
के रूप में की तरह कुछ लोगों को उम्मीद काम नहीं करता है और getView की तरह दृश्य रीफ़्रेश नहीं होगा करता है, notifyDataSetChanged
पूरी सूची के पुनर्निर्माण और हर प्रदर्शित किया मदों के लिए getview
और invalidateViews
बुला भी एक गुच्छा को प्रभावित करेगा खत्म हो जाएगा।
एक आखिरी बात यह है कि अगर उसे केवल पंक्ति दृश्य के बच्चे को बदलने की जरूरत है और getView
जैसी पूरी पंक्ति नहीं है तो कोई अतिरिक्त प्रदर्शन भी प्राप्त कर सकता है। उस मामले में, निम्नलिखित कोड (एक TextView
पाठ बदलने के लिए उदाहरण) list.getAdapter().getView(i, view, list);
की जगह ले सकता:
((TextView)view.findViewById(R.id.myid)).setText("some new text");
कोड में हम पर भरोसा है।
धन्यवाद। अगर मैं ** ** ** ** ** के वर्तमान लेआउट को संपादित कर रहा हूं तो यह काम करेगा। लेकिन क्या मैं ** पूरी तरह ** (एक अलग एक्सएमएल बढ़ा-चढ़ाकर द्वारा) लेआउट बदलना चाहते हैं? अगर मैं एडाप्टर पर 'newview (...)' कहते हैं, यह मुझे जो तथापि 'listView' में डाल नहीं है एक अलग दृष्टिकोण देता है। – hadi
@hadi आपको यह उत्तर पर एक नज़र रखना चाहिए: http://stackoverflow.com/a/11568271/858626 –