Hallo ich habe Widget mit einer Listview, das Daten aus der gleichen SQLite DB holt wie meinen App,
im Widget gibt es einen RefreshButton der dann die Daten aktuell aus der DB auslesen soll, dies funktioniert irgendwie nicht weil er den den Adapter nicht nochmal neu ausliest bei updaten des Widgets, aber warum?
hier mal mein Code
AppWidgetService.class
public class AppWidgetService extends RemoteViewsService {
public RemoteViewsFactory onGetViewFactory(Intent intent) {
DBHelper db = new DBHelper(getBaseContext());
List<Charakter> list = db.getallCharsOrderByGeb();
return (new AppWidgetAdapter(this.getApplicationContext(), intent, list));
}
AppWidgetAdapter.class
public class AppWidgetAdapter implements RemoteViewsService.RemoteViewsFactory {
private Context context;
private int appWidgetId;
private List<Charakter> charakterList;
public AppWidgetAdapter(Context context, Intent intent, List<Charakter> list) {
this.context = context;
appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
this.charakterList = list;
}
@Override
public void onCreate() {
}
@Override
public void onDestroy() {
}
@Override
public int getCount() {
return charakterList.size();
}
@Override
public RemoteViews getViewAt(int position) {
RemoteViews row = new RemoteViews(context.getPackageName(), R.layout.item_list_appwidge);
Charakter chara = charakterList.get(position);
row.setTextViewText(R.id.txt_appwidge_name, chara.getName());
row.setTextViewText(R.id.txt_appwidge_beschreibung, chara.getGeburtstag());
return row;
}
@Override
public RemoteViews getLoadingView() {
return null;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public void onDataSetChanged() {
}
}
Alles anzeigen
AppWidgetProvider.class
public class AppWidget extends AppWidgetProvider {
public static String WIDGET_BUTTON = "de.ronny130286.gw2charviewer.WIDGET_BUTTON";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// There may be multiple widgets active, so update all of them
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++) {
updateAppWidget(context, appWidgetManager, appWidgetIds[i]);
}
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (WIDGET_BUTTON.equals(intent.getAction())) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
updateAppWidget(context, appWidgetManager,appWidgetId);
}
}
@Override
public void onEnabled(Context context) {
// Enter relevant functionality for when the first widget is created
}
@Override
public void onDisabled(Context context) {
// Enter relevant functionality for when the last widget is disabled
}
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
int appWidgetId) {
// Construct the RemoteViews object
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.app_widget);
//views.setTextViewText(R.id.appwidget_text, widgetText);
Intent intent = new Intent(WIDGET_BUTTON);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.btn_appwidge_refresh, pendingIntent );
Intent svcIntent=new Intent(context, AppWidgetService.class);
svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));
views.setRemoteAdapter(appWidgetId, R.id.appwidget_listview, svcIntent);
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
Alles anzeigen
Der Button funktioniert und die updateAppWidget Mehtode wird richtig aufgerufen, aber wie eingangs erwähnt holt er bei updaten nicht die aktuellen Daten aus der DB das macht er komisch weise nur wenn ich das Widget lösche und neu erstelle.