2010-09-29 10 views
6

मैं एक विन्यास गतिविधि है जो निम्न विधि कॉल जब इसकी OK बटन क्लिक किए जाने के साथ एक विजेट लिख रहा हूँ:मैं कॉन्फ़िगरेशन गतिविधि में अद्यतन कैसे लागू करूं?

private void ok() 
{ 
    // ...Do Widget Configuration... 

    // Force an update 
    Context context = getApplicationContext(); 
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); 
    AppWidgetManager.getInstance(context).updateAppWidget(widget_id, views); 

    // Return the expected result 
    Intent result = new Intent(); 
    result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widget_id); 
    setResult(RESULT_OK, result); 

    finish(); 
} 

यह the documentation से लगभग शब्दशः है। widget_id में विजेट आईडी है जो गतिविधि के onCreate() के दौरान खोला गया था।

जब मैं घर स्क्रीन पर विजेट का एक उदाहरण देते हैं, मैं सत्यापित किया है कि मैं घटनाओं की उम्मीद अनुक्रम मिलती है:

  • onReceive() एक ACTION_APPWIDGET_ENABLED हो जाता है अगर यह पहले से एक है।
  • onUpdate() कॉल किया जाता है (जिसमें मुझे पता चलता है कि विजेट कॉन्फ़िगर नहीं है और डिफ़ॉल्ट कार्रवाई के रूप में कुछ खींचता है)।
  • कॉन्फ़िगरेशन गतिविधि प्रकट होती है।
  • जब मैं OK दबाता हूं, तो ऊपर दिए गए ok() विधि को कॉल किया जाता है।

विधि finish() के माध्यम से सभी तरह से हो जाता है और विन्यास गतिविधि चला जाता है, लेकिन वहाँ इस बिंदु के बाद onUpdate() या onReceive() करने के लिए कोई कॉल है। (विजेट के पास updatePeriodMillis नहीं है।) मैं स्क्रीन पर एक विजेट के साथ समाप्त होता हूं जिसमें मेरी डिफ़ॉल्ट कार्रवाई के परिणाम होते हैं लेकिन अपडेट नहीं होते हैं।

अगर मैं कॉन्फ़िगरेशन गतिविधि के बिना विजेट सेट करता हूं, तो इसे बनाए जाने पर अपडेट हो जाता है और सब कुछ अपेक्षित काम करता है (केवल कॉन्फ़िगर किए गए बिट्स के बिना)।

क्या मुझे किसी अपडेट को मजबूर करने के तरीके में कुछ याद आ रही है?

धन्यवाद!

+0

वाह, कोई भी नहीं ...? – Blrfl

+0

यह एंड्रॉइड में एक ज्ञात बग है: ऑन अपडेट को केवल आपके कॉन्फ़िगरेशन गतिविधि से लौटने के बाद ही बुलाया जाना चाहिए। मेरी भी यही समस्या है। उम्मीद है कि 3.2 इसे हल करेगा – soBinary

उत्तर

8

इस काम के लिए निकला:

new MyWidgetProviderClass() 
    .onUpdate(this, 
      AppWidgetManager.getInstance(this), 
      new int[] { widget_id } 
    ); 
+0

इस तरह के रूप में भयानक है, यही वह है जो मैंने किया। मैं अपने AppWidgetProvider के लिए एक स्थिर संदर्भ रखता हूं जिस पर मैंUpdate() पर कॉल करता हूं। यह दुखद है कि वर्तमान में यह एकमात्र तरीका है। –

+0

मुझे भी इस मुद्दे का सामना करना पड़ा। लेकिन हम कॉन्फ़िगरेशन मानों को 'अप्डेट विधि' पर 'AppWidgetProvider' कैसे पास कर सकते हैं? – MobiDev

+0

@ 256: आप या तो डीबी में जानकारी को सहेज सकते हैं या इन्फोस को अलग रखने के लिए widgetId का उपयोग करके साझा किए गए संदर्भों का उपयोग कर सकते हैं –

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