2010-09-03 17 views
5

पर क्लिक करें मेरे पास एक विजेट है जो डेटाबेस से कुछ सूचनाएं दिखाता है। विजेट समय-समय पर हर एक घंटे अद्यतन किया जाता है। लेकिन मैं विजेट पर रीफ्रेश बटन पर क्लिक करके इसे मैन्युअल रूप से अपडेट करने देता हूं। मैं क्लिक एक्शन कैसे कर सकता हूं और विजेट रीफ्रेश कर सकता हूं?बटन से एंड्रॉइड अपडेट विजेट

नोट: विजेट संचालन करने के लिए सेवा का उपयोग करता है।

अग्रिम में Thanx।

उत्तर

1

मैंने घंटों के लिए उत्तर की तलाश की है और आखिरकार मैंने इसे समझ लिया है। अपने AppWidgetProvider में, अपने विजेट में ऑनअपडेट, लूप में, और प्रत्येक विजेट के लिए, एक इरादा बनाएं (इसमें विजेट आईडी और कुछ डेटा इसे अनन्य बनाने के लिए, इरादे की तरह) बनाने के लिए जोड़ें, फिर एक लंबितइन्टेंट बनाएं और इसे असाइन करें वह दृश्य जहां आप क्लिक श्रोता बनाना चाहते हैं।

for(int i = 0; i<appWidgetIds.length; i++) { 
     Intent serviceIntent = new Intent(context, MyService.class); 
     serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); 
     serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME))); 
     PendingIntent pendingServiceIntent = PendingIntent.getService(context, 0, serviceIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

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

     context.startService(serviceIntent); 
     appWidgetManager.updateAppWidget(appWidgetIds[i], views); 
    } 

मेरी विशिष्ट मामले में मैं दो क्लिक श्रोता, एक ताज़ा करने के लिए और एक सेटिंग्स गतिविधि शुरू करने के लिए किया था, इसलिए यदि आप एक गतिविधि शुरू करने के लिए चाहते हैं तो बस PendingIntent.getActivity का उपयोग करें और Intent.FLAG_ACTIVITY_NEW_TASK झंडा जोड़ें।

दो संयुक्त:

for(int i = 0; i<appWidgetIds.length; i++) { 
     Intent serviceIntent = new Intent(context, MyService.class); 
     serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); 
     serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME))); 
     PendingIntent pendingServiceIntent = PendingIntent.getService(context, 0, serviceIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

     Intent settingsIntent = new Intent(context, SettingsActivity.class); 
     settingsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     settingsIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); 
     settingsIntent.setData(Uri.parse(settingsIntent.toUri(Intent.URI_INTENT_SCHEME))); 
     PendingIntent pendingSettingsIntent = PendingIntent.getActivity(context, 0, settingsIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

     RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
     views.setOnClickPendingIntent(R.id.title, pendingSettingsIntent); 
     views.setOnClickPendingIntent(R.id.refresh, pendingServiceIntent); 

     context.startService(serviceIntent); 
     appWidgetManager.updateAppWidget(appWidgetIds[i], views); 
    } 

आशा इस किसी की मदद करेंगे। :)

+0

मैंने कोशिश की लेकिन यह अभी भी सूची को रीफ्रेश नहीं करता है :(यहां मेरा है http://stackoverflow.com/questions/39388686/how-to-refresh-widget-listview-when-button-refresh-is-clicked/39389295 # 39389295 – natsumiyu

0

मुझे लगता है कि आप अपने विजेट दृश्य को फिर से लोड करने के लिए है जब पर * ताज़ा butto * n उपयोगकर्ता क्लिक करें।

//for refresh button 
Intent refresh = new Intent(ctxt, WatchWidget_Honeycomb.class); 
PendingIntent refreshIntent = PendingIntent.getBroadcast(ctxt, 0, refresh, 0); 
widget.setOnClickPendingIntent(R.id.btn_Refresh, refreshIntent); 
appWidgetManager.updateAppWidget(new ComponentName(ctxt,WatchWidget_Honeycomb.class), widget); 

यदि आपको कोई समस्या हो रही है तो टिप्पणी दें।

हैप्पी कोडिंग।

+0

क्या यह 'onUpdate()' में रखा जाना चाहिए? – natsumiyu

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