मैं googled और RemoteViewsService और RemoteViewsService.RemoteViewsFactory का उपयोग कर सूचीदृश्य डेटा हेरफेर करने के लिए कोड मिला। रूपएंड्रॉयड - स्क्रॉल सूची दृश्य मैनुअल ताज़ा साथ विजेट
नीचेIntent svcIntent = new Intent(context, WidgetService.class);
svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetIds[i]);
svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));
RemoteViews widget = new RemoteViews(context.getPackageName(),R.layout.widget_layout);
widget.setRemoteAdapter(appWidgetIds[i], R.id.lstAppointments,svcIntent);
WidgetService.java
public class WidgetService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return (new WidgetViewsFactory(this.getApplicationContext(), intent));
}
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return super.onBind(intent);
}
}
होता है और WidgetViewsFactory की onCreate में वेब सेवा से डेटा प्राप्त करने में सभी के लिए कोड लिखा लागू करता RemoteViewsService.RemoteViewsFactory
रिकॉर्ड मैन्युअल रूप से अद्यतन करने के लिए या स्वचालित रूप से प्रत्येक 5 सेकंड्स, मुझे नीचे दिए गए
01 के अनुसार सेवा विधियों के माध्यम से अपडेट मिलाpublic class WordWidget extends AppWidgetProvider {
static int value = 1;
Handler handler = new Handler();
MyRunnable myRunnable;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// To prevent any ANR timeouts, we perform the update in a service
myRunnable = new MyRunnable(context);
handler.postDelayed(myRunnable, 1000);
}
class MyRunnable implements Runnable {
Context context;
public MyRunnable(Context context) {
this.context = context;
}
public void run() {
context.startService(new Intent(context, UpdateService.class));
handler.postDelayed(myRunnable, 1000);
}
}
public static class UpdateService extends Service {
@Override
public void onStart(Intent intent, int startId) {
// Build the widget update for today
RemoteViews updateViews = buildUpdate(this);
// Push update for this widget to the home screen
ComponentName thisWidget = new ComponentName(this, WordWidget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(thisWidget, updateViews);
}
public RemoteViews buildUpdate(Context context) {
RemoteViews updateViews;
// Build an update that holds the updated widget contents
updateViews = new RemoteViews(context.getPackageName(),
R.layout.widget_word);
Log.e("value", String.valueOf(value));
updateViews.setTextViewText(R.id.word_title, "Title");
updateViews.setTextViewText(R.id.word_type, String.valueOf(value));
updateViews.setTextViewText(R.id.definition, String.valueOf(value));
value += 1;
// When user clicks on widget it opens www.google.com
Intent defineIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("https://www.google.co.in/"));
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
defineIntent, 0);
updateViews.setOnClickPendingIntent(R.id.widget, pendingIntent);
return updateViews;
}
@Override
public IBinder onBind(Intent intent) {
// We don't need to bind to this service
return null;
}
}
}
स्वचालित रूप से सूचीदृश्य अद्यतन करने के लिए कैसे .. मैं जैसा कि ऊपर उल्लेख TextView अपडेट करने का तरीका पता है।
Tnx genious। :) –
इस साइट में कई धागे को देखने के बाद और कोई भी मेरे लिए काम किया (शायद इसलिए कि मैं एक "संग्रह विजेट" का उपयोग कर रहा), यह एक एक आकर्षण के रूप में काम! आपका बहुत बहुत धन्यवाद! –
मैं sendBroadcast() का उपयोग कर रहा था जो बदले में प्रत्येक लेआउट को पुनर्निर्माण कर रहा था, और सूचीदृश्य अपडेट नहीं कर रहा था। विधि सूचित करें AppWidgetViewDataChanged केवल इसे कम महंगा बनाने के लिए ताज़ा करने का ख्याल रखता है। –