如何在小部件中在运行时更改按钮背景两次?

时间:2014-11-07 14:55:12

标签: android widget

我有一个小部件,并包含一些按钮。按钮标签字符串来自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
                    );

2 个答案:

答案 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);