2011-03-05 17 views
31

एंड्रॉइड में एक गतिविधि शुरू करने से पहले प्रगति संवाद कैसे प्रदर्शित करते हैं (यानी, जबकि गतिविधि कुछ डेटा लोड हो रही है)?एंड्रॉइड में एक गतिविधि शुरू करने से पहले प्रगति संवाद कैसे प्रदर्शित करें?

+0

आप अपने प्रश्न से पहले रिक्त स्थान को निकालना चाहिए .. यह कोड ब्लॉक के रूप में उठाया जा रहा है और आपके प्रश्न को पढ़ने के लिए कठिन बना रहा है। – DTing

उत्तर

60

आपको AsyncTask में डेटा लोड करना चाहिए और अपना इंटरफ़ेस अपडेट करना चाहिए जब डेटा लोड हो जाता है।

आप अपने AsyncTask की onPostExecute() विधि में भी एक नई गतिविधि शुरू कर सकते हैं।

public class MyTask extends AsyncTask<Void, Void, Void> { 
    public MyTask(ProgressDialog progress) { 
    this.progress = progress; 
    } 

    public void onPreExecute() { 
    progress.show(); 
    } 

    public void doInBackground(Void... unused) { 
    ... do your loading here ... 
    } 

    public void onPostExecute(Void unused) { 
    progress.dismiss(); 
    } 
} 

फिर अपनी गतिविधि में आप क्या करेंगे:

अधिक विशेष रूप से, आप एक नया वर्ग है कि AsyncTask फैली आवश्यकता होगी

ProgressDialog progress = new ProgressDialog(this); 
progress.setMessage("Loading..."); 
new MyTask(progress).execute(); 
+0

बहुत बहुत धन्यवाद :) आपका जवाब काम किया। – Neha

+0

हे उत्तर के लिए धन्यवाद, मैं बिल्कुल यह कर रहा हूं, लेकिन किसी कारण से प्रगति डायलॉग पॉप अप करता है जब फोन लैंडस्केप ओरिएंटेशन में होता है लेकिन जब यह पोर्ट्रेट अभिविन्यास में नहीं होता है। क्या आपके पास इस पर कोई विचार है? मैंने पहली कक्षा से संवाद शुरू करने का प्रयास किया है (वह जो मेरा टास्क कहता है) लेकिन फिर भी वही समस्या है। कभी-कभी, संवाद पोर्ट्रेट मोड में काम करता है लेकिन यह फोकस से बाहर दिखता है और यह 10 प्रयासों में केवल एक बार होता है। – Art

2

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

अपनी प्रक्रिया

pd = ProgressDialog.show(this, "Synchronizing data", "Please wait..."); 
Thread t = new Thread(this); 
t.start(); 

शुरू करने के लिए यह आपकी गतिविधि के लिए Runnable को लागू करना चाहिए के रूप में

public class SyncDataActivity extends Activity implements Runnable 

और अंत में एक विधि इस प्रकार लंबी चलने वाली प्रक्रिया

@Override 
public void run() { 
     //your code here 
} 
प्रदर्शन करने के लिए निम्न कार्य करें
+0

यदि आप धागे का उपयोग करते हैं तो आपको यूआई थ्रेड पर पोस्ट-टास्क कोड निष्पादित करने जैसी विभिन्न चीजों का प्रबंधन करना होगा। –

+0

मैथ्यू ... क्या आप AsyncTask में सत्य को सेट कर सकते हैं? – JAL

+0

हाय, मैंने कोशिश की जैसे आपने लोगों को बताया, लेकिन फिर भी यह काम नहीं कर रहा है। मैं नीचे अपना कोड पोस्ट कर रहा हूं। क्या कोई कृपया बता सकता है कि मैं क्या गलत कर रहा हूं? – Neha

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