我有一个窗口小部件,该小部件包含在文本视图中。从mainaactivity我试图更新小部件数据,因为从主要活动中添加了更多数据,我希望小部件刷新
class TodoWidget : AppWidgetProvider
{
..............
private void SetTextViewText(RemoteViews widgetView)
{
// widgetView.SetTextViewText(Resource.Id.widgetMedium, new TodoDBR().GetAllRecordsForWidget());
widgetView.SetTextViewText(Resource.Id.widgetSmall, new TodoDBR().GetAllRecordsForWidget());
}
在主要活动中,添加数据后,我试图调用方法以更新小部件,但它不起作用
AppWidgetManager appWidgetManager = AppWidgetManager.GetInstance(this.Context);
var manager = AppWidgetManager.GetInstance(this.Context);
var componentName = new ComponentName(Context.PackageName, Java.Lang.Class.FromType(typeof(TodoWidget)).Name);
int[] appWidgetIds = appWidgetManager.GetAppWidgetIds(componentName);
appWidgetManager.NotifyAppWidgetViewDataChanged(appWidgetIds, Resource.Layout.TodoWidget);
它没有更新我的小部件
如果找到了答案,我的自我只不过是其他任何人都有相同问题的是解决方案
RemoteViews remoteViews = new RemoteViews(Context.PackageName, Resource.Layout.TodoWidget);
ComponentName thisWidget = new ComponentName(this.Context, Java.Lang.Class.FromType(typeof(TodoWidget)).Name);
remoteViews.SetTextViewText(Resource.Id.widgetSmall, new TodoDBR().GetAllRecordsForWidget());
AppWidgetManager.GetInstance(this.Context).UpdateAppWidget(thisWidget, remoteViews);
无法投票,但是谢谢 - 4年后。终于对我有用。对于某人,从Main或Service调用更新小部件:
呼叫更新:任何地点,服务计时器或主进等:
public void updateWidgets()
{
Intent brIntent = new Intent(AppWidgetManager.ActionAppwidgetUpdate);
SendBroadcast(brIntent);
}
recive更新:widgetfile.cs:
public override void OnReceive(Context context, Intent intent) {
RemoteViews remoteViews = new RemoteViews(Context.PackageName, Resource.Layout.**TodoWidget**);
ComponentName thisWidget = new ComponentName(context, Java.Lang.Class.FromType(typeof(**TodoWidget**)));
remoteViews.SetTextViewText(Resource.Id.widgetSmall, "Hello world");
AppWidgetManager.GetInstance(this.Context).UpdateAppWidget(thisWidget, remoteViews);
}
接下来是.setAction()