Android - Widget mit Scrollbarer Listview-Manuelle Aktualisierung
Habe ich gegoogelt und gefunden, den code zu manipulieren listview-Daten mit RemoteViewsService und RemoteViewsService.RemoteViewsFactory. wie unten
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 enthält
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);
}
}
und schrieb alle codes für das abrufen von Daten aus webservice im onCreate von WidgetViewsFactory implementiert RemoteViewsService.RemoteViewsFactory
Für die Aktualisierung von Datensätzen, die manuell oder automatisch bei jeder 5seconds, fand ich Update auch über das Service-Methoden, wie unten erwähnt
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;
}
}
}
Wie das aktualisieren der listview automatisch.. ich weiß, wie ich update textview, wie oben erwähnt.
InformationsquelleAutor Vishal Khakhkhar | 2012-10-13
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie aktualisieren Sie die Listenansicht, indem Sie mit notifyAppWidgetViewDataChanged() Methode der AppWidgetManager. Sie haben, um die Instanz von AppWidgetManager, Holen Sie sich die AppWidgetIds und der Anruf
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, viewId);
Pseudo-Code,
Beim Aufruf
notifyAppWidgetViewDataChanged()
dann dieonDataSetChanged()
Methode derRemoteViewsFactory
genannt werden, die als Adapter für deine ListView. Sie können web-service-Sachen und andere Operationen inonDataSetChanged()
, die Antwort, und fügen Sie es auf Ihre Daten-set, das vielleicht ArrayList oder einer solchen Sammlung.Weitere Lesungen/Referenz, die Sie überprüfen können, Halten Sammlung Von Daten Frisch Teil von den docs. Auch können Sie eine demo-Beispiel aus meinem github.
Nach einem Blick auf viele threads auf dieser Website, und keiner für mich gearbeitet (wahrscheinlich, weil ich bin mit einem "Collection-Widget"), diese funktionierte wie ein Charme! Ich danke Ihnen sehr!
ich war über sendBroadcast (), welche wiederum war Neuerstellung jedes layout, und war nicht die Aktualisierung des listviews. Methode notifyAppWidgetViewDataChanged nur kümmert erfrischend, dass es weniger teuer.
InformationsquelleAutor Lalit Poptani