2010-06-25 36 views
13

कताई नहीं है यह एक एंड्रॉइड-व्यापी समस्या है, जिसे आप एपीआई डेमो में दृश्य -> ​​प्रगति बार -> संवाद के अंतर्गत देख सकते हैं।एंड्रॉइड: प्रगति संवाद स्पिनर

असल में, यदि आप एक प्रगति संवाद दिखाते हैं, तो यह पहली बार अपेक्षा की जाती है। यदि आप इसे खारिज करते हैं और इसे फिर से दिखाते हैं (गतिविधि को नष्ट किए बिना या उसके जैसा कुछ भी), कताई छवि कताई बंद कर देती है। एपीआई डेमो में आप "इंडेटर्मिनेट दिखाएं" पर क्लिक करके इसे देख सकते हैं, संवाद को खारिज करने के लिए वापस दबाकर और बटन को फिर से क्लिक कर सकते हैं।

मैंने अपना खुद का प्रगति संवाद बनाने की कोशिश की है, हालांकि यह वही समस्या दिखाता है, क्योंकि समस्या "प्रोग्रेसबार" कताई छवि के साथ है।

मुझे आश्चर्य है कि इस समस्या के लिए किसी के पास कोई कामकाज है या नहीं।

+0

संभव नकल में एक पूर्ण आसान ट्यूटोरियल का पालन करने के दिखा सकते हैं? http://stackoverflow.com/questions/2231438/progress-dialog-while-starting- new-activity क्या हम कुछ कोड देख सकते हैं? क्या आपने इसे दिखाने से पहले प्रत्येक बार प्रक्रिया डीडियोग को पुन: प्रयास करने की कोशिश की है? तो procDialog = new ProcessDialog (...) की तरह कुछ; – Mike

उत्तर

24

यदि आप Dialog को खारिज करते हैं, तो आपको एक ही उदाहरण फिर से दिखाना नहीं चाहिए। या तो dismiss() के बजाय hide() का उपयोग करें या नया बनाएं। hide() का उपयोग करते समय आपको अब भी dismiss() पर आवश्यकता होती है जब इसकी आवश्यकता नहीं होती है।

3

ऑब्जेक्ट्स के लिए आपको onCreateDialog का उपयोग करने की आवश्यकता नहीं है, जैसा कि यहां बताया गया है http://developer.android.com/guide/topics/ui/dialogs.html#ProgressDialog। आपको showDialog और onCreateDialog का उपयोग करने के बजाय मुख्य कोड में प्रगति संवाद बनाना और दिखाना चाहिए।

1

आप अपनी गतिविधि में ProgressDialog उदाहरण घोषित कर सकते हैं और onCreateDialog(int) ओवरराइड कर सकते हैं। फिर showDialog(int) पर कॉल करने के बजाय आप ProgressDialog पर अपने संदेश को onCreateDialog(int) पर कॉल करें जहां आप dialog.show() पर कॉल करेंगे।

public class Home extends Activity { 

ProgressDialog recordingDialog; 

//where you want to call the dialog 
recordingDialog = (ProgressDialog)onCreateDialog(RECORDING_DIALOG_KEY); 


@Override 
protected Dialog onCreateDialog(int id) { 
    ProgressDialog dialog = new ProgressDialog(this); 

    switch (id) { 
    case RECORDING_DIALOG_KEY: 
     ((ProgressDialog) dialog).setIndeterminate(true); 
     dialog.setCancelable(false); 
     ((ProgressDialog) dialog) 
       .setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     dialog.setMessage("Recording..."); 
     dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Stop", 
       dialogStopListener); 

     dialog.show(); 

     break; 
    default: 
     dialog = null; 
    } 
    return dialog; 
} 
} 
4

मैं एक ही जवाब के लिए देख रहा था, फिर भी यहां के जवाब में से कोई भी मेरे लिए काम किया है क्योंकि मैं और भी तो वे Activity.showDialog() तरह गतिविधि के संवाद तरीकों का उपयोग करने के लिए तो मैं नहीं था उन्हें अपने आप का प्रबंधन करना चाहता था स्वचालित रूप से एक घूर्णन पर पुनर्निर्मित किया जाना चाहिए।

कुछ अन्य उत्तरों की तरह, अगर ProgressDialog पर खारिज() को बुलाया जाता है तो यह कताई बंद कर देगा। Activity.onCreateDialog() संवाद का संदर्भ सहेजता है, इसलिए इसे एक बार बनाया जाने पर इसे अगले Activity.showDialog() कॉल पर पुनर्निर्मित नहीं किया जाएगा। यह सिर्फ Activity.onPrepareDialog() पर कॉल करेगा और इसके पहले से मौजूद उदाहरण का उपयोग करेगा। अगर इसे खारिज कर दिया गया तो यह फिर से दिखाए जाने पर स्पिन नहीं होगा।

आप ही पुन: बनाने के लिए यह मजबूर कर सकते हैं अगर आप Dialog.dismiss() कॉल करने के बजाय ProgressDialog की आईडी के साथ Activity.removeDialog() कहते हैं। यह इसे खारिज कर देगा और उस संदर्भ को भी हटा देगा ताकि Activity.onShowDialog() को अगली बार Activity.onCreateDialog() का उपयोग केवल Activity.onPrepareDialog() के बजाय और एक नया नया (और कताई) उदाहरण बनाएं।

सुनिश्चित करें कि आपके पास ProgressDialog है जिसे बर्खास्त या रद्द कर दिया जा सकता है, तो आप श्रोता सेट कर सकते हैं ताकि आप Activity.removeDialog() पर कॉल कर सकें। अन्यथा इसे केवल खारिज कर दिया जाएगा। Activity.showDialog() पर कॉल करने से पहले आप इसे ठीक से कॉल भी कर सकते हैं।

उम्मीद है कि किसी की मदद करता है।

1

आप कक्षा को परिभाषित कर सकते हैं और AsyncTask को कार्यान्वित कर सकते हैं। यहां आप अपनी पृष्ठभूमि प्रक्रियाओं को इस तरह की doinbackground() विधि में परिभाषित करते हैं।

@Override 
    protected String doInBackground(String... params) { 
    publishProgress(new Integer(1)); 
    for(int i=0;i<=300;i++){ 
System.out.println(i); 
} 
publishProgress(new Integer(1)); 
for(int i=301;i<=600;i++){ 
System.out.println(i); 
} 
................. 
.................... 
........................... 
//your background tasks 
publishProgress(new Integer(1)); 
for(int i=601;i<=900;i++){ 
System.out.println(i); 
} 
pd.dismiss();//dismiss the progress dialog here... 
return null; 
} 

तुम भी onProgressUpdate() method.Check द्वारा अपनी प्रगति के बारे में जानकारी http://www.androidcookers.co.cc/2011/12/want-to-run-progress-dialog-in-android.html

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