android - ProgressDialog while refreshing a ListView -
मेरे पास एक SimpleAdapter द्वारा आविष्कृत एक ListView है, जो हाशमैप्स के एक ArrayList से मूल्य प्राप्त करता है I सरणी सूची को एक विधि load ()
द्वारा बनाया गया है जो मेरी साइट से डेटा लाता है मेरे पास एक मेनू विकल्प है जो उन्हें फिर से फ़ेच करके और adapter.notifyDataSetChanged ()
को कॉल करके डेटा को रीफ़्रेश करने की अनुमति देता है और यह वास्तव में ठीक काम करता है, सरणी सूची को अपडेट कर रहा है और सूची दृश्य को ताज़ा करता है अब, यह एचटीएन कनेक्शन स्थापित करने और डेटा प्राप्त करने के लिए load ()
के लिए कुछ सेकंड लेता है, इसलिए मैं एक प्रगति डीआईएलओॉग सेट करना चाहता हूं ताकि उपयोगकर्ता को जारी रखने की प्रक्रिया के बारे में सूचित किया जा सके। मुझे पता है कि मैं UI धागे पर प्रगति डीलाॉग नहीं डाल सकता जहां load ()
काम करता है, इसलिए मैंने एक एसिंक टास्क के साथ कोशिश की यह ठीक काम करता है, जबकि नए डेटा को प्राप्त किया जा रहा है और एडेप्टर को पास किया जा रहा है, लेकिन यह एक समस्या भी जोड़ता है: सूचीव्यू अब प्रदर्शित वस्तुओं को ताज़ा नहीं करता है, जब तक कि मैं संशोधित सूची आइटम को स्क्रीन से स्क्रॉल नहीं करता और वापस, फिर यह नई सामग्री दिखाएगा प्रगति डीआईएलओॉग और सूची सामग्रियों के रिफ्रेश दोनों के लिए मैं क्या कर सकता हूं?
यह एसिंकटैस्क में प्रगतिशील डीलाॉग के साथ कोड है (संपादन डेटा पर स्क्रीन पर सूची रीफ्रेश ट्रिगर नहीं):
सार्वजनिक बूलियन ऑनऑप्ट्सआईटम चयनित (मेनूइटम आइटम) {स्विच (आईटेट। आईटीएमआईडी ()) {केस आर.आईड.अपडेट: {loading.show (); // प्रगति डीलोग एसिंक टास्क & lt; शून्य, शून्य, शून्य & gt; LoadingTask = नया एसिंक टास्क & lt; शून्य, शून्य, शून्य & gt; () {@ ओवरराइड सुरक्षित वॉयूम डोइनबैकग्राउंड (शून्य ... पैरामीटर) {load (); // डेटा ला रहा है, थोड़ी देर रिटर्न बातिल लेता है; } @Override सुरक्षित शून्य पर पोस्टएक्सएक्टेक (शून्य परिणाम) {loading.dismiss (); }}; loadingTask.execute (); adapter.notifyDataSetChanged (); वापस सच; } डिफ़ॉल्ट: वापसी super.onOptionsItemSelected (आइटम); }}
यह कोड है जो ListView के साथ-साथ डेटा को रीफ्रेश करेगा (लेकिन मुझे एक प्रगति डीआईएलओॉग स्थापित नहीं करने देगा):
सार्वजनिक बूलियन ऑन ऑप्शन इटैम चुने गए (मेनूइटम आइटम) {स्विच (आईटेट। आईटीएमआईडी ()) {केस आर.ड.अपडेट: {लोड ()); adapter.notifyDataSetChanged (); वापस सच; } डिफ़ॉल्ट: वापसी super.onOptionsItemSelected (आइटम); }}
बस की तरह, पर PreExecute ()
एएसकेटीस्क और शो ()
से प्रगतिशील टैग
ad <
असिनक टास्क & lt; शून्य, शून्य, शून्य & gt; LoadingTask = नया असिनका टास्क & lt; शून्य, शून्य, शून्य & gt; () {@Override संरक्षित शून्य पर PreExecute () {loading.show (); // प्रगति डीआलोग} @ ओवरराइड सुरक्षित ऑब्जेक्ट डो इनबैकग्राउंड (शून्य ... पैरामीटर) {load (); // डेटा ला रहा है, थोड़ी देर रिटर्न बातिल लेता है; } @Override सुरक्षित शून्य पर PostExecute (शून्य परिणाम) {adapter.notifyDataSetChanged (); loading.dismiss (); }}; loadingTask.execute (); वापस सच;
Comments
Post a Comment