दिलचस्प पोस्ट
जावा 8 संपत्ति के द्वारा अलग एंड्रॉइड: TextView.setText () का उपयोग कर एक स्ट्रिंग का रंग हिस्सा? "टेक्स्ट" और नए स्ट्रिंग ("टेक्स्ट") में क्या अंतर है? वर्चुअल डिस्ट्रक्टर्स का उपयोग कब करना है? क्या मैं एक "व्यू" एक पायथन सूची पर बना सकता हूं? मैं एक गणना शैली कैसे प्राप्त करूं? आंतरिक एचटीएमएल पर ईलेमेंट बनाने का लाभ? सी में scanf के साथ इनपुट पार्सिंग समस्या वापस JSON मूल्य जनरेटेड फ़ाइल को अस्थायी रूप से सर्वलेट आधारित वेब अनुप्रयोग में कैसे सहेजें डुप्लिकेट को सूची से कैसे हटाएं? क्यों <% =%> अभिव्यक्ति के रूप में सर्वर-नियंत्रणों पर प्रॉपर्टी मान एक कंपाइल त्रुटियों का कारण बनता है? क्या मैं sass के साथ एक बाहरी होस्ट की गई फ़ाइल आयात कर सकता हूं? jQuery अजाक्स सफलता अनाम समारोह गुंजाइश मैं जावा में विधि का निष्पादन कैसे करता हूं?

मैं एंड्रॉइड गतिविधि को पुनरारंभ कैसे करूं?

मैं एंड्रॉइड Activity पुनरारंभ कैसे करूं? मैंने निम्नलिखित की कोशिश की, लेकिन Activity केवल निकलती है

 public static void restartActivity(Activity act){ Intent intent=new Intent(); intent.setClass(act, act.getClass()); act.startActivity(intent); act.finish(); } 

वेब के समाधान से एकत्रित समाधान "मैं एंड्रॉइड गतिविधि को पुनरारंभ कैसे करूं?"

मैंने इस तरह मेरी थीम स्विचर किया:

 Intent intent = getIntent(); finish(); startActivity(intent); 

असल में, मैं पहले finish() बुला रहा हूँ, और मैं उसी क्रिया का प्रयोग कर रहा हूं जो इस गतिविधि से शुरू हुई थी। यही चाल लगता है?

अद्यतन करें: जैसा कि नीचे राल्फ द्वारा बताया गया है, Activity.recreate() एपीआई 11 और उससे आगे में जाने का एक तरीका है। यदि आप एक API11 + पर्यावरण में हैं तो यह बेहतर होगा आप अभी भी वर्तमान संस्करण की जांच कर सकते हैं और ऊपर कोड स्निपेट कॉल कर सकते हैं यदि आप एपीआई 10 या नीचे हैं (कृपया राल्फ के जवाब को ऊपर उठाने के लिए मत भूलना!)

एपीआई स्तर 11 (हनीकॉब) के बाद से, आप गतिविधि के विश्राम () विधि को कॉल कर सकते हैं ( इस उत्तर के लिए धन्यवाद)।

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

एसडीके 11 से पहले, ऐसा करने का एक तरीका ऐसा है:

 public void reload() { Intent intent = getIntent(); overridePendingTransition(0, 0); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); finish(); overridePendingTransition(0, 0); startActivity(intent); } 

बस राल्फ और बेन के उत्तर (टिप्पणियों में किए गए परिवर्तनों सहित) को गठबंधन करने के लिए:

 if (Build.VERSION.SDK_INT >= 11) { recreate(); } else { Intent intent = getIntent(); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); finish(); overridePendingTransition(0, 0); startActivity(intent); overridePendingTransition(0, 0); } 

यह समाधान मेरे लिए काम किया

पहले गतिविधि को पूरा करें और फिर इसे फिर से शुरू करें

नमूना कोड:

 public void restartActivity(){ Intent mIntent = getIntent(); finish(); startActivity(mIntent); } 

मैं इस कोड का इस्तेमाल किया था इसलिए मैं अभी भी पुराने एंड्रॉइड संस्करणों का समर्थन कर सकता हूं और नए एंड्रॉइड संस्करणों पर recreate() उपयोग कर सकता हूं।

कोड:

 public static void restartActivity(Activity activity){ if (Build.VERSION.SDK_INT >= 11) { activity.recreate(); } else { activity.finish(); activity.startActivity(activity.getIntent()); } } 

नमूना:

 import android.app.Activity; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { private Activity mActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mActivity = MainActivity.this; Button button = (Button) findViewById(R.id.restart_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { restartActivity(mActivity); } }); } public static void restartActivity(Activity activity) { if (Build.VERSION.SDK_INT >= 11) { activity.recreate(); } else { activity.finish(); activity.startActivity(activity.getIntent()); } } } 

इस विधि को कॉल करें

 private void restartFirstActivity() { Intent i = getApplicationContext().getPackageManager() .getLaunchIntentForPackage(getApplicationContext().getPackageName() ); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK ); startActivity(i); } 

धन्यवाद,

हालांकि यह कई बार उत्तर दिया गया है

अगर किसी टुकड़ी से किसी गतिविधि को पुनरारंभ करना होता है, तो मैं ऐसा करता हूं:

 new Handler().post(new Runnable() { @Override public void run() { Intent intent = getActivity().getIntent(); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION); getActivity().overridePendingTransition(0, 0); getActivity().finish(); getActivity().overridePendingTransition(0, 0); startActivity(intent); } }); 

तो क्या आप यह सोच सकते हैं कि यह थोड़ी अधिक उंचा है? लेकिन Handler पोस्टिंग आपको इसे जीवनचक्र पद्धति में कॉल करने की अनुमति देती है। मैंने इस पर onRestart / पर onResume तरीकों का प्रयोग किया है, यह onRestart कि क्या ऐप पर वापस आने वाले उपयोगकर्ता के बीच राज्य बदल गया है या नहीं। (कुछ स्थापित)

Handler बिना यदि आप इसे किसी अजीब जगह में कहते हैं तो यह केवल गतिविधि को मार डालेगा और उसे पुनरारंभ नहीं करेगा।

आप कोई भी प्रश्न पूछ सकते हैं।

चीयर्स, क्रिस

वर्तमान गतिविधि को पुनरारंभ करने का यह सबसे आसान तरीका है:

 finish(); startActivity(getIntent()); 

अच्छी तरह से यह सूचीबद्ध नहीं है लेकिन कुछ के एक कॉम्बो जो पहले से ही पोस्ट किए गए हैं:

 if (Build.VERSION.SDK_INT >= 11) { recreate(); } else { Intent intent = getIntent(); finish(); startActivity(intent); } 

वास्तव में निम्न कोड API स्तर 5 और उसके बाद के लिए मान्य है, इसलिए यदि आपका लक्ष्य एपीआई इस से कम है, तो आप EboMike के कोड के समान कुछ के साथ समाप्त होंगे।

 intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); overridePendingTransition(0, 0); 

एक हैकी तरीका है जिसकी मुख्य गतिविधि सहित किसी भी गतिविधि पर काम करना चाहिए।

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 

जब ओरिएंटेशन परिवर्तन होता है, तो एंड्रॉइड सामान्य रूप से आपकी गतिविधि को पुनर्निर्मित करेगा (जब तक आप इसे ओवरराइड नहीं करते)। यह विधि 180 डिग्री घूर्णन के लिए उपयोगी है, जब एंड्रॉइड आपकी गतिविधि को पुन: तैयार नहीं करता है।

 public void onRestart() { super.onRestart(); Intent intent=new Intent(); intent.setClass(act, act.getClass()); finish(); act.startActivity(intent); } 

इसका इस्तेमाल करने की कोशिश करो ..

कैमरा के साथ अजीब भूतल दृश्य जीवनचक्र व्यवहार के संयोजन के साथ। मैंने पाया है कि पुनरारंभ () सतह के दृश्य के जीवन चक्र के साथ अच्छी तरह से व्यवहार नहीं करता है। सतह का उपयोग कभी मनोरंजन चक्र के दौरान नहीं बुलाया जाता है। इसे रीस्यूम (अजीब) के बाद कहा जाता है, जिस बिंदु पर मेरा सतह दृश्य नष्ट हो जाता है।

किसी गतिविधि को पुनः बनाने का मूल तरीका ठीक काम करता है

 Intent intent = getIntent(); finish(); startActivity(intent); 

मुझे यह बिल्कुल नहीं पता है कि यह क्यों है, लेकिन यह सिर्फ एक अवलोकन है जो भविष्य में दूसरों की ओर से मार्गदर्शन कर सकता है क्योंकि यह मेरी समस्याएं तय की थीं, जो मुझे भूतल दृश्यों के साथ थीं

यदि आप अंतिम पंक्ति को निकालते हैं, तो आप नई act गतिविधि बना लेंगे, लेकिन आपका पुराना उदाहरण अब भी जीवित होगा।

क्या आपको क्रियाकलाप को पुनरारंभ करने की आवश्यकता है जैसे अभिविन्यास बदल गया है (यानी आपका राज्य सहेजा गया है और onCreate(Bundle) )?

यदि आप ऐसा नहीं करते हैं, तो एक संभावित कार्यवाही एक अतिरिक्त, डमी गतिविधि का उपयोग करने के लिए होगी, जो कि पहली गतिविधि से शुरू की जाएगी, और जो नौकरी उस के नए उदाहरण को शुरू करना है। या बस कार्य करने के लिए कॉल में देरी करें। act.finish() , नए के शुरू होने के बाद।

अगर आपको ज्यादातर राज्यों को बचाने की ज़रूरत है, तो आप बहुत ही गहरे पानी में हो रहे हैं, क्योंकि यह आपके राज्य के सभी गुणों को पारित करने के लिए विशेष रूप से गुमरामी नहीं है, विशेषकर अपने पुराने संदर्भ / गतिविधि को बिना किसी नए उदाहरण से गुजरने के लिए।

कृपया, निर्दिष्ट करें कि आप क्या करने का प्रयास कर रहे हैं

आपके प्रश्न का हल है:

 public static void restartActivity(Activity act){ Intent intent=new Intent(); intent.setClass(act, act.getClass()); ((Activity)act).startActivity(intent); ((Activity)act).finish(); } 

आपको नई गतिविधि शुरू करने के साथ-साथ मौजूदा गतिविधि को समाप्त करने के लिए गतिविधि संदर्भ में डालना होगा।

आशा है कि यह सहायक..और मेरे लिए काम करता है

यदि आप कुछ टुकड़े से कॉल कर रहे हैं तो नीचे कोड करें

 Intent intent = getActivity().getIntent(); getActivity().finish(); startActivity(intent); 

क्रिएट पर विधि को कॉल करें उदाहरण के लिए onCreate(null);