2012-12-16 8 views
6

बंद कर दिया है, मैं वास्तव में इरादा झंडे से परिचित नहीं हूं, इसलिए कृपया मेरे साथ भालू।इरादा झंडे - एक नया गतिविधि उदाहरण कैसे शुरू करें और दूसरों को

मैं एक ऐसा एप्लिकेशन कर रहा हूं जो व्यूपेजर में डेटाबेस से सामान प्रदर्शित करता हो। मेरे पास एक विजेट भी है जो समय-समय पर एक यादृच्छिक पंक्ति खींचता है और इसे प्रदर्शित करता है। अब, जब मैं उस पर क्लिक करता हूं, तो मुझे एक ऐसी गतिविधि में ले जाया जाता है जहां एक ही सामग्री प्रदर्शित होती है और अब मैं इस पर कार्रवाई कर सकता हूं।

सब कुछ काम करता है लेकिन जब मैं एक गतिविधि है पहले से चल रहा है और फिर विजेट पर क्लिक करें, यह एक नया उदाहरण बनाता है, लगता है क्योंकि जब मैं वापस बटन मैं अनुप्रयोग से बाहर निकलते नहीं कर रहा हूँ, लेकिन पिछले करने के लिए लिया हूँ दबाएँ उदाहरण या कुछ।

क्या गतिविधि का एक नया उदाहरण शुरू करने का कोई तरीका है और अगर कुछ पिछले उदाहरण झंडे का उपयोग करके उन्हें बंद कर रहे थे?

मैंने CLEAR_TOP के साथ खेला और वह सामान लेकिन मैं ईमानदारी से नहीं जानता कि मैं क्या कर रहा हूं।

धन्यवाद!

// संपादित

Intent.FLAG_ACTIVITY_CLEAR_TOP कुछ भी करने को नहीं लगता है। इरादा। FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP पिछले को शीर्ष पर लाने के लिए प्रतीत होता है और नए या किसी चीज़ को अनदेखा करता है। शायद मुझे दोबारा दोहराएं, मैं लॉन्चर आइकन से गतिविधि शुरू करता हूं, फिर मैं होम बटन दबाता हूं और विजेट पर क्लिक करता हूं और इसे एक नया उदाहरण लेना चाहिए जहां ViewPager.setCurrentItem सही पृष्ठ (विजेट में जैसा ही) सेट करता है। यदि पहले कोई मुख्य गतिविधि नहीं चल रही थी, तो सब कुछ ठीक है, लेकिन अगर यह चल रहा था, तो इसे खत्म करें।

MyWidgetProvider extends AppWidgetProvider 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    Log.d("MainActivity", "MyWidgetProvider # onUpdate"); 

    for (int i = 0; i < appWidgetIds.length; i++) { 
     int appWidgetId = appWidgetIds[i]; 

     Intent intent = new Intent(context, MainActivity.class); 
     intent.putExtra("from_widget", true); 
     //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
     views.setOnClickPendingIntent(R.id.widget_container, pendingIntent); 

     appWidgetManager.updateAppWidget(appWidgetId, views); 
    } 

} 

उत्तर

8

ऐसा करने के कई तरीके हैं। यदि आप एक नया उदाहरण बनाना चाहते हैं और वर्तमान इंस्टेंस को बंद करना चाहते हैं (यह मानते हुए कि यह गतिविधि स्टैक के शीर्ष पर है) तो आपको Intent.FLAG_ACTIVITY_CLEAR_TOP सेट करना होगा।

एक और विकल्प गतिविधि के उसी उदाहरण का पुन: उपयोग करना होगा यदि यह पहले से ही ढेर के शीर्ष पर है। इस मामले में आपको दोनोंIntent.FLAG_ACTIVITY_CLEAR_TOP और Intent.FLAG_ACTIVITY_SINGLE_TOP सेट करने की आवश्यकता है। यदि आप ऐसा करते हैं, तो एंड्रॉइड गतिविधि का एक और उदाहरण नहीं बनाएगा, लेकिन नए इरादे को वितरित करने के लिए आपकी गतिविधि के onNewIntent() पर कॉल करेगा।

+0

मैंने कुछ कोड स्निपेट के साथ प्रश्न संपादित किया है, कृपया एक नज़र डालें। – urSus

+0

अपना मैनिफेस्ट पोस्ट करें। –

+1

जैसा कि मैंने कहा था, एक साथ CLEAR_TOP और SINGLE_TOP सेट करने से गतिविधि का एक ही उदाहरण उपयोग किया जाएगा और फ्रेमवर्क विजेट से इरादे से गुजरने पर 'न्यूनेंटेंट() 'पर कॉल करेगा। आप NEW_TASK को भी सेट करने का प्रयास कर सकते हैं। तो यदि आप 'setFlags (Intent.FLAG_ACTIVITY_NEW_TASK | इरादा का उपयोग करते हैं।FLAG_ACTIVITY_CLEAR_TOP) 'इसे' मुख्य गतिविधि 'का एक नया उदाहरण बनाना चाहिए, अन्य सभी को बंद करना। –

2

करें अन्य बंद कर दिया,

Intent.FLAG_ACTIVITY_CLEAR_TOP 

और झंडा नया उदाहरण,

Intent.FLAG_ACTIVITY_NEW_TASK 
0

मेरे आवश्यकता एक नया उदाहरण के साथ गतिविधि (AbcActivity) शुरू करने और (एक ही गतिविधि के किसी भी अन्य उदाहरण AbcActivity बंद करने के लिए था) यदि कोई हो, और शीर्ष पर अन्य गतिविधियां बंद करें (यदि कोई हो)। समाधान मेरे लिए काम किया गया है:

startActivity(new Intent(MainActivity.this,AbcActivity.class) 
      .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)); 
संबंधित मुद्दे