क्या एंड्रॉइडActivity
में पुनः लोड करना एक अच्छा अभ्यास है ?
इसे करने का सबसे अच्छा तरीका क्या होगा? this.finish
और फिर this.startActivity
गतिविधि के साथ Intent
?
क्या एंड्रॉइडActivity
में पुनः लोड करना एक अच्छा अभ्यास है ?
इसे करने का सबसे अच्छा तरीका क्या होगा? this.finish
और फिर this.startActivity
गतिविधि के साथ Intent
?
जवाबों:
आप बस उपयोग कर सकते हैं
finish();
startActivity(getIntent());
Activity
खुद के भीतर से तरोताजा करने के लिए ।
उन लोगों के लिए जो रीक्रिएट () विधि का उपयोग करने के बाद उस झपकी को देखना नहीं चाहते हैं
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
वरीयता परिवर्तन से लौटने के बाद गतिविधि को फिर से लोड करने के लिए मैं यही करता हूं।
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
यह अनिवार्य रूप से गतिविधि को फिर से शुरू करने का कारण बनता है।
अपडेट किया गया: ऐसा करने का एक बेहतर तरीका recreate()
विधि को कॉल करना है। यह गतिविधि को फिर से बनाने का कारण बनेगा।
मैंने पहले उत्तर देखे जो कि आशय का उपयोग करके गतिविधि को फिर से लोड करने के लिए दिए गए हैं। वे काम करेंगे लेकिन आप एक्टिविटी क्लास में दी गई रीक्रिएट () पद्धति का उपयोग करके भी ऐसा कर सकते हैं।
इसके बजाय यह लिखना
// मुख्य गतिविधि को संवाद बॉक्स के करीब ताज़ा करें
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
यह केवल यह लिखकर किया जा सकता है
recreate();
recreate()
मेरे लिए समाधान था - "पुनरारंभ करना" गतिविधि मेरे लिए काम नहीं करती थी, क्योंकि मैंने "StartActivityForResult" का उपयोग करके गतिविधि शुरू की थी और इसने व्यवहार को तोड़ दिया।
बस उपयोग करें
this.recreate();
यह गतिविधि में ऑनक्रैट विधि को ट्रिगर करेगा
मुझे जल्दबाज़ी में अपने एक एप्लिकेशन में एक संदेश सूची को अपडेट करने की आवश्यकता थी, इसलिए मैंने जिस डायलॉग को बंद किया था, उसे बंद करने से पहले मैंने अपनी मुख्य UI गतिविधि का एक ताज़ा प्रदर्शन किया। मुझे यकीन है कि इसको पूरा करने के बेहतर तरीके हैं।
// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
एंड्रॉइड में एक प्रक्रिया प्रबंधन प्रणाली शामिल है जो गतिविधियों के निर्माण और विनाश को संभालती है जो मोटे तौर पर किसी भी लाभ को नकारती है जिसे आप मैन्युअल रूप से किसी गतिविधि को फिर से शुरू करने से देखेंगे। आप इसके बारे में अधिक जानकारी एप्लीकेशन फंडामेंटल्स में देख सकते हैं
हालांकि यह सुनिश्चित करने के लिए अच्छा अभ्यास क्या है कि आपके ऑनपॉज और ऑनटॉप तरीके किसी भी संसाधन को जारी करते हैं, जिसे आपकी गतिविधियों को कम करने के लिए आपको ऑन-लाईन का उपयोग करने की आवश्यकता नहीं है।
कुछ मामलों में यह अन्य में सबसे अच्छा अभ्यास है यह एक अच्छा विचार नहीं है यह संदर्भ से प्रेरित है यदि आपने ऐसा करने के लिए चुना है तो अपने बेटों के लिए एक गतिविधि से गुजरने का सबसे अच्छा तरीका है:
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
बात यह है कि जब भी आप गतिविधि से समाप्त होते हैं (तब से) आप अपनी जीवित गतिविधि में वापस आ जाएँ
अपनी संपूर्ण गतिविधि को पुनः लोड करना एक भारी काम हो सकता है। कोड का वह भाग डालें जिसे ( कोटलिन ) में ताज़ा किया जाना है :
override fun onResume() {
super.onResume()
//here...
}
जावा:
@Override
public void onResume(){
super.onResume();
//here...
}
और जब भी जरूरत हो " onResume () " पर कॉल करें ।
मुझे नहीं लगता कि यह एक अच्छा विचार है ... एक क्लीनर विधि को लागू करना बेहतर होगा। उदाहरण के लिए, यदि आपकी गतिविधि कोई प्रपत्र रखती है, तो क्लीनर विधि फार्म में प्रत्येक विजेट को साफ कर सकती है और सभी अस्थायी डेटा को हटा सकती है। मुझे लगता है कि आप जो चाहते हैं: गतिविधि को इसकी प्रारंभिक स्थिति में पुनर्स्थापित करें।
कुछ समय के लिए इसके साथ प्रयोग करने के बाद, मुझे किसी गतिविधि को फिर से शुरू करने का कोई अप्रत्याशित परिणाम नहीं मिला है। इसके अलावा, मेरा मानना है कि ओरिएंटेशन में बदलाव होने पर एंड्रॉइड डिफ़ॉल्ट रूप से ऐसा ही करता है, इसलिए मुझे एक समान परिस्थिति में ऐसा नहीं करने का कोई कारण नहीं दिखता है।
मैं एक ही समस्या है
import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
यह कोड मेरे लिए काम करता है। एंड्रॉइड एपी 17
एक गतिविधि में आप गतिविधि recreate()
को "पुनः बनाने" के लिए कॉल कर सकते हैं (एपीआई 11+)
मेरे पास एक और तरीका था: launchMode
अपनी गतिविधि की सेटिंग singleTop
और कॉलिंग के बिना finish()
, बस startActivity(getIntent())
काम करना होगा। बस दोनों में नए डेटा के बारे में परवाह करने के लिए है onCreate()
और onNewIntent
। सुष के तरीके के साथ, एप्लिकेशन को ब्लिंक किया जा सकता है जैसे AMAN SINGH ने कहा। लेकिन AMAN SINGH का दृष्टिकोण अभी भी एक नई गतिविधि का निर्माण करेगा, जो किसी भी तरह, अनावश्यक है, भले ही उसने 'पलक' समस्या को ठीक कर दिया हो, मुझे लगता है।
इस सवाल के लिए बहुत देर हो चुकी है, लेकिन अगर कोई समाधान की तलाश में है, तो यह यहां है।
लॉगइन करने के बाद मुझे भी यही समस्या थी इसलिए मैंने इसका इस्तेमाल किया
@Override
protected void onRestart() {
this.recreate();
super.onRestart();
}
मैं इस का इस्तेमाल किया और यह बिना ठीक काम करता है
finish()
startActivity(getIntent());
मेरे लिए यह काम कर रहा है यह एक और इरादे नहीं बना रहा है और उसी पर नया डेटा लोड किया गया है।
overridePendingTransition(0, 0);
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);