दिलचस्प पोस्ट
PHP और mySQL: वर्ष 2038 बग: यह क्या है? इसे कैसे हल करें? जावास्क्रिप्ट अर्रे घुमाएँ () क्यों अजाक्स स्क्रिप्ट आईआईएस 7.5 विन 2008 R2 सर्वर पर नहीं चल रही है? सीमा के किनारे पर लिंक के साथ एक चक्र कैसे बनाएं ASP.NET MVC / WebAPI अनुप्रयोग में HTTP विकल्प क्रिया का समर्थन कैसे करें मध्यम ट्रस्ट को खो दिया कारण के लिए विकसित करने की कोशिश कर रहा है? जांच करना कि कोई मान अजीब है या यहां तक ​​कि MySQL 5.5 पूरी तरह से हटाना एआरसी + NSZombieEnabled का उपयोग करते समय ऑब्जेक्ट क्यों नहीं dealloc'ed है क्या अपवाद सुरक्षा के लिए "स्कॉच व्यवहार" पाने के साधन के रूप में IDisposable और "प्रयोग" का उपयोग करने के लिए यह अपमानजनक है? MySQL प्रक्रिया बनाम फ़ंक्शन, जो मैं कब का उपयोग करेगा? हाइबरनेट प्रोक्सी के ऑब्जेक्ट का कारण क्रमबद्ध नहीं कर सका PHP फ़ंक्शन कॉल करने के लिए jquery $ .ajax का उपयोग कर एक डेटा फ्रेम के पूरक ढूंढें (एंटी-जॉब) निजी शुद्ध वर्चुअल फ़ंक्शन का क्या मतलब है?

Android में स्क्रीन रोटेशन पर संवाद बर्खास्तगी को रोकें

गतिविधि पुनरारंभ होने पर मैं अलर्ट बिल्डर के साथ बने संवाद को बर्खास्त किए जाने से रोकने के लिए कोशिश कर रहा हूं।

अगर मैं ऑन कॉन्फिगरेशन बदलकर विधि अधिभार कर रहा हूं तो मैं इसे सफलतापूर्वक कर सकता हूं और लेआउट को अभिविन्यास को ठीक करने के लिए कर सकता हूं लेकिन मुझे एडिटेक्स्ट की चिपचिपा पाठ सुविधा मिलती है। इसलिए संवाद समस्या को सुलझाने में मैंने इस लिखित समस्या को बनाया है।

अगर मैं स्ट्रिंग्स को एडिटेक्ट से सहेजता हूं और इनको कॉग्निग्यूशन परिवर्तन में उन्हें पुन: असाइन करता हूं, तो वे रोटेशन से पहले जो भी दर्ज किया गया था, वे प्रारंभिक मान के लिए डिफ़ॉल्ट मानते हैं। यहां तक ​​कि अगर मैं किसी अवैध को मजबूर करता हूं, तो उसे अद्यतन करने के लिए प्रतीत होता है।

मुझे वास्तव में संवाद की समस्या या एडिटेस्ट समस्या को हल करने की आवश्यकता है I

सहायता के लिए धन्यवाद।

वेब के समाधान से एकत्रित समाधान "Android में स्क्रीन रोटेशन पर संवाद बर्खास्तगी को रोकें"

आजकल इस समस्या से बचने का सबसे अच्छा तरीका है एक DialogFragment का उपयोग कर।

एक नया वर्ग बनाएं, जो DialogFragmentAlertDialog ओवरराइड करें और अपने पुराने Dialog या एक AlertDialog

तब आप इसे DialogFragment.show(fragmentManager, tag) साथ दिखा सकते हैं।

एक Listener साथ यहां एक उदाहरण है:

 public class MyDialogFragment extends DialogFragment { public interface YesNoListener { void onYes(); void onNo(); } @Override public void onAttach(Activity activity) { super.onAttach(activity); if (!(activity instanceof YesNoListener)) { throw new ClassCastException(activity.toString() + " must implement YesNoListener"); } } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { return new AlertDialog.Builder(getActivity()) .setTitle(R.string.dialog_my_title) .setMessage(R.string.dialog_my_message) .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ((YesNoListener) getActivity()).onYes(); } }) .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ((YesNoListener) getActivity()).onNo(); } }) .create(); } } 

और गतिविधि में आप कहते हैं:

 new MyDialogFragment().show(getSupportFragmentManager(), "tag"); // or getFragmentManager() in API 11+ 

यह उत्तर इन अन्य तीन प्रश्नों (और उनके उत्तर) की व्याख्या में मदद करता है:

  • एंड्रॉइड डिवाइस रोटेशन के बाद बर्खास्त करने के लिए संवाद से बचने का सर्वोत्तम तरीका
  • एंड्रॉइड डायलॉगफ्रैगमेंट बनाम डायलॉग
  • संगतता पैकेज का उपयोग कर मैं एक डायलॉगफ्रैगमेंट कैसे दिखा सकता हूं?
 // Prevent dialog dismiss when orientation changes private static void doKeepDialog(Dialog dialog){ WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); lp.copyFrom(dialog.getWindow().getAttributes()); lp.width = WindowManager.LayoutParams.WRAP_CONTENT; lp.height = WindowManager.LayoutParams.WRAP_CONTENT; dialog.getWindow().setAttributes(lp); } 
 public static void doLogout(final Context context){ final AlertDialog dialog = new AlertDialog.Builder(context) .setIcon(android.R.drawable.ic_dialog_alert) .setTitle(R.string.titlelogout) .setMessage(R.string.logoutconfirm) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ... } }) .setNegativeButton("No", null) .show(); doKeepDialog(dialog); } 

यदि आप अभिविन्यास परिवर्तन पर लेआउट को बदल रहे हैं तो मैं अपने मैनिफेस्ट में android:configChanges="orientation" नहीं android:configChanges="orientation" क्योंकि आप किसी भी तरह से विचारों को android:configChanges="orientation" कर रहे हैं।

इन तरीकों का इस्तेमाल करते हुए अपनी गतिविधि की वर्तमान स्थिति (जैसे पाठ में प्रवेश किया, दिखाया गया संवाद, डेटा प्रदर्शित किया जाता है) को सहेजें:

 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); } 

इस तरह से गतिविधि को फिर से क्रिएट के माध्यम से चला जाता है और बाद में onStoreInstanceState विधि को कॉल करता है जहां आप अपने संपादन टेक्स्ट का मूल्य फिर से सेट कर सकते हैं।

यदि आप अधिक जटिल वस्तुओं को संग्रहीत करना चाहते हैं तो आप उपयोग कर सकते हैं

 @Override public Object onRetainNonConfigurationInstance() { } 

यहां आप किसी भी ऑब्जेक्ट को स्टोर कर सकते हैं और getLastNonConfigurationInstance(); में कर सकते हैं आपको बस getLastNonConfigurationInstance(); कॉल getLastNonConfigurationInstance(); वस्तु प्राप्त करने के लिए

इस प्रश्न का उत्तर बहुत पहले हुआ था।

फिर भी यह गैर-हैक और सरल समाधान है जो मैं अपने लिए उपयोग करता हूं।

मैंने अपने लिए यह सहायक वर्ग किया है, इसलिए आप इसे अपने आवेदन में भी उपयोग कर सकते हैं।

उपयोग यह है:

 PersistentDialogFragment.newInstance( getBaseContext(), RC_REQUEST_CODE, R.string.message_text, R.string.positive_btn_text, R.string.negative_btn_text) .show(getSupportFragmentManager(), PersistentDialogFragment.TAG); 

या

  PersistentDialogFragment.newInstance( getBaseContext(), RC_EXPLAIN_LOCATION, "Dialog title", "Dialog Message", "Positive Button", "Negative Button", false) .show(getSupportFragmentManager(), PersistentDialogFragment.TAG); public class ExampleActivity extends Activity implements PersistentDialogListener{ @Override void onDialogPositiveClicked(int requestCode) { switch(requestCode) { case RC_REQUEST_CODE: break; } } @Override void onDialogNegativeClicked(int requestCode) { switch(requestCode) { case RC_REQUEST_CODE: break; } } } 

एक बहुत ही आसान तरीका है onCreateDialog() डायलॉग पर विधि से संवाद बनाने onCreateDialog() (नीचे नोट देखें)। आप उन्हें showDialog() माध्यम से दिखाते हैं इस तरह, एंड्रॉइड आपके लिए रोटेशन को संभालता है और आपको विंडो लेक से बचने के लिए पर onPause() को dismiss() कॉल dismiss() ज़रूरत नहीं है और फिर आपको संवाद बहाल करने की आवश्यकता नहीं है। डॉक्स से:

इस गतिविधि द्वारा प्रबंधित डायलॉग दिखाएं क्रेट डिआलिओग (इन्ट, बंडल) को कॉल करने के लिए एक ही आईडी के साथ पहली बार दिए जाने वाले आईडी के लिए कॉल किया जाएगा। उसके बाद, संवाद स्वचालित रूप से सहेजा जाएगा और बहाल होगा।

अधिक जानकारी के लिए एंड्रॉइड डॉक्स ShowDialog () देखें। आशा है कि यह किसी को मदद करता है!

नोट: यदि AlertDialog.Builder का उपयोग करते हुए, onCreateDialog show() से show() को कॉल न करें, बजाय create() कॉल करें अगर ProgressDialog का उपयोग करना है, तो बस ऑब्जेक्ट बनाएं, आपको आवश्यक पैरामीटर सेट करें और इसे वापस करें। निष्कर्ष में, show() अंदर onCreateDialog() समस्याएं उत्पन्न होती हैं, बस डायलॉग इंस्टेंस बनाइए और इसे वापस करें यह काम करना चाहिए! (मुझे showDialog () का उपयोग करते हुए कॉन्टेट () से – अनुभव से संवाद प्रदर्शित नहीं करने का अनुभव है, लेकिन यदि आप इसका उपयोग पुन: (या) एक श्रोता कॉलबैक में करते हैं तो यह अच्छी तरह से काम करता है)।

बस एंड्रॉइड जोड़ें: configChanges = AndroidManifest.xml में आपकी गतिविधि तत्व के साथ "अभिविन्यास"

उदाहरण:

 <activity android:name=".YourActivity" android:configChanges="orientation" android:label="@string/app_name"></activity> 

महज प्रयोग करें

 ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize 

और ऐप पता चलेगा कि कैसे रोटेशन और स्क्रीन आकार को संभालना है

डायलॉग की स्थिति को बनाए रखने के लिए आप गतिविधि के ऑन-सेव / ऑन रिसचर विधियों के साथ डायलॉग के ऑन-स्वे / ऑन रिसचर विधियों को जोड़ सकते हैं।

नोट: यह विधि उन "सरल" संवादों के लिए काम करती है, जैसे एक चेतावनी संदेश प्रदर्शित करना यह डायलॉग में एम्बेडेड वेबव्यू की सामग्री को पुन: उत्पन्न नहीं करेगा। यदि आप वास्तव में रोटेशन के दौरान बर्खास्तगी से जटिल संवाद को रोकना चाहते हैं, तो चुंग आईडब्ल्यू की विधि का प्रयास करें।

 @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); myDialog.onRestoreInstanceState(savedInstanceState.getBundle("DIALOG")); // Put your codes to retrieve the EditText contents and // assign them to the EditText here. } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // Put your codes to save the EditText contents and put them // to the outState Bundle here. outState.putBundle("DIALOG", myDialog.onSaveInstanceState()); }