8

在我的 AppWidgetProvider 中,我执行以下操作:

@Override
public void onReceive(Context ctx, Intent intent) {
    final String action = intent.getAction();
    if (action.equals(NEXTPAGE_ACTION)) {
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(ctx);
        RemoteViews rv = new RemoteViews(ctx.getPackageName(), R.layout.widget_layout);
        rv.setViewVisibility(R.id.page1, View.GONE);
        rv.setViewVisibility(R.id.page2, View.VISIBLE);
    final int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
    appWidgetManager.updateAppWidget(appWidgetId, rv);
    }
}

尽管我正在通过 updateAppWidget 更新布局,但更改并未真正反映在 UI 上。可能出了什么问题?非常感谢!

4

2 回答 2

16

您是否尝试过使用 INVISIBLE 而不是 GONE?Gone 将删除视图,就好像它从未存在过一样。并且不可见将保持视图在布局中的位置,但使其不可见。

 rv.setViewVisibility(R.id.page1, View. INVISIBLE);
于 2012-02-08T03:39:46.303 回答
1

我对小部件应用程序有同样的问题。如果您遇到这种情况,我会检测到appWidgetId错误。首次更新 UI 时,您必须将 appWidgetId跟踪到静态变量。然后,我们可以将该变量用作通用appWidgetId来更新 UI。

或者您可以在onReceiver函数中尝试以下代码:

final ComponentName provider = new ComponentName(context, this.getClass()); appWidgetManager.updateAppWidget(provider, views);

哪些视图是RemoteViews

谢谢,对不起我的英语。

于 2014-12-05T04:00:09.397 回答