2013-01-24 16 views
5

मेरे पास एक ऐसी गतिविधि है जो ब्लूटूथ डिवाइस से कनेक्ट करते समय प्रोग्रेसडिअलॉग दिखाती है। यह प्रोग्रेसडिअलॉग ऊपर होने पर स्क्रीन अभिविन्यास परिवर्तन तक ठीक काम करता है। प्रोग्रेसडिअलॉग गायब हो जाता है और जब कनेक्शन स्थापित होने के बाद, ऐप प्रगति करता हैDialog.dismiss(); इस बिंदु पर ऐप क्रैश हो जाता है क्योंकि खारिज करने के लिए कोई प्रोग्रेसडिअलॉग नहीं है। स्क्रीन अभिविन्यास में परिवर्तन करते समय मैं प्रोग्रेसडिअलॉग को खारिज कैसे कर सकता हूं?एंड्रॉइड में स्क्रीन रोटेशन परिवर्तन पर खारिज करने के लिए प्रोग्रेसडिअलॉग को कैसे रोकें?

public void prepareViews(int ID, boolean state){ 
     switch(ID){ 
     case USERNAME_TEXTBOX: 
      LoginUsernameTextBox.setEnabled(state); 
      break; 
     case PASSWORD_TEXTBOX: 
      LoginPasswordTextBox.setEnabled(state); 
      break; 
     case LOGIN_BUTTON: 
      LoginButton.setEnabled(state); 
      break; 
     case LOGIN_PROGRESSBAR: 
      if(state == true){ 
       LoginProgressBar.setVisibility(View.VISIBLE); 
       LoginProgressBar.setIndeterminate(true); } 
      else{ 
       LoginProgressBar.setVisibility(View.GONE); 
      } 
      break; 
     case CONNECTING_DIALOG: 
      if(state == true){ 
      progressDialog = ProgressDialog.show(MainActivity.this, "", "Connecting", true); } 
      else{ 
       progressDialog.dismiss(); 
      } 
      break; 
     } 
    } 

उत्तर

2

मैं डायलॉगफ्रैगमेंट का उपयोग करने के लिए समाप्त होता हूं और यह काम करता है।

public class MainActivity extends Activity{ 



    public void prepareViews(int ID, boolean state){ 
     switch(ID){ 
     case USERNAME_TEXTBOX: 
      LoginUsernameTextBox.setEnabled(state); 
      break; 
     case PASSWORD_TEXTBOX: 
      LoginPasswordTextBox.setEnabled(state); 
      break; 
     case LOGIN_BUTTON: 
      LoginButton.setEnabled(state); 
      break; 
     case LOGIN_PROGRESSBAR: 
      if(state == true){ 
       LoginProgressBar.setVisibility(View.VISIBLE); 
       LoginProgressBar.setIndeterminate(true); } 
      else{ 
       LoginProgressBar.setVisibility(View.GONE); 
      } 
      break; 
     case CONNECTING_DIALOG: 
      if(state == true){ 
       showDialog(); 
      } 
      break; 
     } 
    } 

public void showDialog() { 
     FragmentManager fragmentManager = getFragmentManager(); 
     ProgressDialogFragment newFragment = new ProgressDialogFragment(); 
     newFragment.show(fragmentManager, "Dialog"); 
    } 

public static class ProgressDialogFragment extends DialogFragment { 
     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      final ProgressDialog progressDialog = ProgressDialog.show(getActivity(), "", "Connecting to " 
        + DeviceName.subSequence(0, DeviceName.length() - 17)); 
      return progressDialog; 
     } 
    } 
} 
+0

आदर्श रूप से, इसे छिपाने के लिए आपको गतिविधि से अलग संवाद खंड के कार्यान्वयन को बनाए रखने के लिए 'progressDialog' के बजाय संवाद खंड पर विधियों को कॉल करना चाहिए। अर्थात। यदि आप यह बदलना चाहते हैं कि संवाद खंड कैसे गतिविधि को बदलता है तो गतिविधि को भी बदलता है। – frozenkoi

0

आपको इसे करने के लिए अभिविन्यास को स्वयं को संभालना होगा। आपके मैनिफेस्ट में, सभी सक्रियताओं के लिए आप इसे एंड्रॉइड जोड़ना चाहते हैं: coinfigChange = "ओरिएंटेशन"। इससे प्रणाली को आपके ऐप को रोटेशन पर नष्ट करने और पुनर्निर्माण से रोका जा सकेगा, और इसके बजाय आपकी गतिविधि को कॉन्फिग चेंज फ़ंक्शन पर कॉल करेगा।

1

इसे आजमाएं।

if (progressDialog.isShowing()) { 
        progressDialog.dismiss(); 
       } 

यहाँ लिंक android Docs

0

आप ओवरलोड और अपने मेनिफ़ेस्ट में गतिविधि के android:coinfigChange="orientation" जोड़ने की जरूरत है।

आप रोटेशन लेआउट संभाल करने की जरूरत है बुद्धिमान आपको बस इतना करना निम्न

@Override 
public void onConfigurationChanged(Configuration newConfig){ 

    if(!isConnection){  
     super.onConfigurationChanged(newConfig); 
     setContentView(R.layout.main); 
    }   
} 

जैसे कुछ तुम भी) के बाद आप setContentView (फोन प्रगति संवाद के पुनर्निर्माण अगर आप पूरी तरह से रोटेशन को संभालने के लिए चाहते हैं सकता है की जरूरत है।

7

ध्यान रखें कि जब आप डिवाइस को घुमाते हैं तो Android नष्ट हो जाती है और गतिविधियां पुन: प्रयास करती है। आपकी समस्या यह है कि progressDialognull है क्योंकि गतिविधि को पुनर्निर्मित करने के बाद उस चर को फिर से सेट नहीं किया गया था।

आपको DialogFragment का उपयोग करने की आवश्यकता होगी और activity lifecycle पर ध्यान रखें। आपको क्या करना है यह ट्रैक रखना है कि क्या संवाद दिखाया गया था और इसे डायलॉगफ्रैगमेंट का उपयोग करके ऑनक्रेट में फिर से प्रदर्शित किया गया था।

पहले यह Activity.dismissDialog और Activity.showDialog के साथ किया गया था लेकिन अब उन्हें बहिष्कृत कर दिया गया है।

अधिक जानकारी: using dialog fragments

+0

उत्तर के लिए धन्यवाद! – user1888162

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