我有一个小部件,并包含一些按钮。按钮标签字符串来自AsyncHTTPTask。 我会在启动互联网连接之前更改按钮背景为黑色,然后将数据更改按钮BG更改为绿色。例子不起作用。我没有看到黑色状态,只是完成绿色状态。
remoteViews.setInt(
context.getResources().getIdentifier("widget_button" + i, "id", context.getPackageName()),
"setBackgroundResource",
R.drawable.button_draw_black_gradient
);
SystemClock.sleep(3000);
try {
jsonStr = new AsyncHTTPTask().execute(SURL).get();
} catch (InterruptedException e) {
....
remoteViews.setInt(
context.getResources().getIdentifier("widget_button" + i, "id", context.getPackageName()),
"setBackgroundResource",
R.drawable.button_draw_green_gradient
);
答案 0 :(得分:0)
尝试请求视图的布局并通过调用invalidate
手动刷新视图:
remoteViews.requestLayout();
remoteViews.setInt(
context.getResources().getIdentifier("widget_button" + i, "id", context.getPackageName()),
"setBackgroundResource",
R.drawable.button_draw_black_gradient
);
remoteViews.invalidate();
我认为你的代码有问题。当AsyncTask
完成任务时,您应该将按钮更改为绿色。
因此请将此代码移至onPost
:
remoteViews.requestLayout();
remoteViews.setInt(
context.getResources().getIdentifier("widget_button" + i, "id", context.getPackageName()),
"setBackgroundResource",
R.drawable.button_draw_green_gradient
);
remoteViews.invalidate();
答案 1 :(得分:0)
我现在解决了我的问题。 这部分强制更新:
ComponentName thisWidget = new ComponentName(context,FooBar.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(thisWidget, remoteViews);