2013-01-05 20 views
6

पर काम करता है क्या कोई भी देख सकता है कि मैं निम्नलिखित तरीके से सही तरीके से कर रहा हूं। मेरे पास एक टुकड़ा है जिसमें प्रगतिशील है और मुझे इसे एक अभिविन्यास स्विच में काम करने की आवश्यकता है। मैं वर्तमान में तो इस तरह कार्य करें:प्रोग्रेसडिअलॉग (फ्रैगमेंट) जो एक ओरिएंटेशन स्विच

// I am using the compat libraries 
import android.support.v4.app.DialogFragment; 

public class ProgressDialogFragment extends DialogFragment { 

    private ProgressDialog mProgressDialog = null; 
    private int   mMax   = 100; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setStyle(DialogFragment.STYLE_NO_TITLE, 0); 
     setRetainInstance(true); 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     mProgressDialog = new ProgressDialog(getActivity()); 
     mProgressDialog.setTitle("Title"); 
     mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     mProgressDialog.setCancelable(true); 
     mProgressDialog.setProgress(0); 
     mProgressDialog.setMax(mMax); 
     mProgressDialog.setCanceledOnTouchOutside(false); 

     return mProgressDialog; 
    } 

    // there seems to be a bug in the compat library - if I don't do the following - the dialog is not show after an orientation switch 
    @Override 
    public void onDestroyView() { 
     if (getDialog() != null && getRetainInstance()) 
      getDialog().setDismissMessage(null); 
     super.onDestroyView(); 
    } 

    public void setMax(int arg1) { 
     mProgressDialog.setMax(arg1); 
     mMax = arg1; 
    } 

    public void setProgress(int arg1) { 
     mProgressDialog.setProgress(arg1); 
    } 
} 

मेरे गतिविधि में मैं इस ProgressDialogFragment बना सकते हैं और मैं इस शो फोन() जब मैं संवाद की जरूरत है दिखाने के लिए। मैं समझने की कोशिश कर रहा हूं कि ऑनक्रेट डायलॉग विधि में क्यों मैं mProgressDialog को वापस नहीं कर सकता अगर यह पहले से मौजूद है (मुझे अपवाद मिलता है कि "सामग्री जोड़ने से पहले अनुरोध() को कॉल किया जाना चाहिए")। निश्चित रूप से टुकड़ों के उपयोग में से एक इन मामलों में संसाधनों का पुन: उपयोग करना है - मुझे पहले से मौजूद एक का उपयोग करने के बजाय एक नया संवाद क्यों बनाने की आवश्यकता है?

उत्तर

2

आप केवल क्रिएटडिअलॉग विधि में पुराने संवाद को पार नहीं कर सकते हैं क्योंकि इसका पुराना संदर्भ यानी नष्ट होने वाली गतिविधि का संदर्भ है।

यदि आप संवाद को फिर से नहीं बनाते हैं तो आप मेमोरी रिसाव के साथ समाप्त हो जाएंगे।

+0

ऑनक्रेट विधि को अभिविन्यास स्विच पर नहीं कहा जा रहा है - टुकड़ा नष्ट नहीं हुआ है और फिर पुनर्निर्मित किया गया है। – Lieuwe

+0

क्षमा करें मेरा मतलब है क्रिएटडिअलॉग विधि जिसे फिर से बुलाया जाएगा। –

+0

क्या आप अभिविन्यास परिवर्तनों के बीच प्रगति को सहेजने की कोशिश कर रहे हैं? –

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