要在 AppWidget 中显示来自 Firebase 的数据,需要遵循以下步骤:
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
class MyWidgetService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new MyRemoteViewsFactory(getApplicationContext(), intent);
}
private class MyRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
List list = new ArrayList<>();
Context context;
MyRemoteViewsFactory(Context context, Intent intent) {
this.context = context;
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReference = firebaseDatabase.getReference("YOUR_REFERENCE_PATH");
}
@Override
public void onCreate() {}
@Override
public void onDataSetChanged() {
list.clear();
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
String item = postSnapshot.getValue(String.class);
list.add(item);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public void onDestroy() {}
@Override
public int getCount() {
return list.size();
}
@Override
public RemoteViews getViewAt(int position) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.list_item);
views.setTextViewText(R.id.list_item_text, list.get(position));
return views;
}
@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;
}
}
}
Intent intent = new Intent(context, MyWidgetService.class);
views.setRemoteAdapter(R.id.widget_list_view, intent);
ComponentName componentName = new ComponentName(context, YourAppWidgetProvider.class);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
appWidgetManager.updateAppWidget(componentName, views);
尝试以上步骤后,您应该能够在