2011-09-07 8 views
17

मैं ProgressDialog का उपयोग कर रहा हूं Fragment के रूप में प्रबंधित किया गया। भले ही मैं ProgressDialog को गैर-रद्द करने योग्य सेट करने के लिए सेट करता हूं, फिर भी बैक बटन स्टैक से Fragment को निकालने के लिए काम करेगा। इस तरह मेरे भीतर के वर्ग देखो:एक खंड के रूप में प्रबंधित होने पर रद्द करने योग्य नहीं होने के लिए प्रगति संवाद कैसे सेट करें?

public static class ProgressDialogFragment extends DialogFragment { 

    private DialogStyle dialogStyle; 

    public static ProgressDialogFragment newInstance(String title, String message) { 
     ProgressDialogFragment fragment = new ProgressDialogFragment(); 
     Bundle args = new Bundle(); 
     args.putString("title", title); 
     args.putString("message", message); 
     fragment.setArguments(args); 

     return fragment; 
    } 

    public void setDialogStyle(DialogStyle dialogStyle) { 
     this.dialogStyle = dialogStyle; 
    } 


    @Override 
    public ProgressDialog onCreateDialog(Bundle savedInstanceState) { 
     String title = getArguments().getString("title"); 
     String message = getArguments().getString("message"); 

     ProgressDialog progressDialog = new ProgressDialog(getActivity()); 
     progressDialog.setTitle(title); 
     progressDialog.setMessage(message); 

     if(dialogStyle!=null) { 
      switch (dialogStyle) { 
       case CANCELABLE: 
        progressDialog.setCancelable(true); 
        break; 
       case NON_CANCELABLE: 
        progressDialog.setCancelable(false); 
        break; 

      } 
     } else { 
      progressDialog.setCancelable(false); 
     } 

     progressDialog.show(); 

     return progressDialog; 
    } 
} 

और फिर विधि मैं बेनकाब है:

public void showProgressDialog(String title, String message, DialogStyle dialogStyle) { 
      Fragment prev = fragmentManager.findFragmentByTag("progress dialog"); 
      if(prev!=null) { 
       ft.remove(prev); 
      } 
      ft.addToBackStack(null); 

      DialogFragment newFragment = ProgressDialogFragment.newInstance(title, message); 
      ((ProgressDialogFragment)newFragment).setDialogStyle(dialogStyle); 
      newFragment.show(fragmentManager, "progress dialog"); 
     } 

तो यहाँ स्पष्ट भ्रम है कि वापस बटन ProgressDialog को हटा क्योंकि यह एक Fragment के रूप में प्रबंधित किया जा रहा है। तो मैं इसे कैसे बना सकता हूं ताकि Dialog रद्द करने योग्य नहीं है?

अजीब लगता है की तरह कुछ कोशिश करने के लिए:

@Override 
    public void onBackPressed() { 
     if(fragmentManager.fragmentManager.findFragmentByTag("progress dialog")!=null) { 

     } 
    } 
+0

एंड्रॉयड उपयोग कर सकते हैं कह रही है कि ProgressDialog अब और नहीं किया जाना चाहिए, तो इसके बजाय आप चाहिए लगता है "अपने लेआउट में एक ProgressBar का उपयोग करें।" Http://developer.android.com/ गाइड/विषयों/ui/dialogs.html। वे कहते हैं क्यों नहीं, लेकिन मुझे लगता है कि इंतजार के बाद असामान्य घटनाओं को संभालने की कोशिश में सभी गड़बड़ी से बचने के लिए हो सकता है (विफल सर्वर कॉल, पृष्ठभूमि कार्य से वापस आ रहा ऐप)। – Lucy

उत्तर

35
ProgressDialog के बजाय

, आप DialogFragment पर setCancelable(false) क्यों की कोशिश क्यों नहीं करते?

+1

अच्छा बिंदु! 'सार्वजनिक शून्य सेटडियलोग स्टाइल (डायलॉग स्टाइल डायलॉग स्टाइल) { के रूप में सरल .setCancelable (dialogStyle == DialogStyle.CANCELABLE); } '(मैं यहां एनम का उपयोग कर रहा हूं) – LuxuryMode

+0

सोचें, धन्यवाद! – mitchellt

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