Ben googled ve RemoteViewsService ve RemoteViewsService.RemoteViewsFactory kullanarak işlemek için kod bulundu. Android - Kaydırılabilir Listview El ile Yenileme Kılavuzu Yenile
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);
}
}
içerir ve WidgetViewsFactory arasında onCreate içinde webcoder verilerini alırken için tüm kodları yazmış aşağıdaki gibi uygular elle kayıtları güncellemek için RemoteViewsService.RemoteViewsFactory
veya otomatik olarak her 5 saniyede, aşağıdaki gibi Hizmet aracılığıyla Güncelleştirme yöntemleri bulundu:
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;
}
}
}
Liste görünümü otomatik olarak nasıl güncellenir .. Yukarıda belirtilen metin görünümünü nasıl güncelleyeceğimi biliyorum.
Tnx genious. :) –
Bu sitede birçok konuya baktıktan sonra ve hiçbiri benim için çalıştı (muhtemelen bir "Collection Widget'ı kullanıyorum çünkü), bu bir çekicilik gibi çalıştı! Çok teşekkür ederim! –
, her bir düzeni yeniden düzenleyen ve liste görünümlerini güncellemeyen sendBroadcast() kullanıyordum. Yöntem notifyAppWidgetViewDataChanged sadece daha az pahalı hale getirerek ferahlatıcı ilgilenir. –