在Android小部件中,如何使用RemoteViews的setViewVisibility方法?

9
在我的 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并没有反映出更改。可能出了什么问题?非常感谢!

2个回答

16

你尝试使用INVISIBLE而不是GONE了吗?GONE会将视图完全移除,就好像它从未存在过一样。而INVISIBLE则会保留视图在布局中的位置,但是将其设为不可见。

 rv.setViewVisibility(R.id.page1, View. INVISIBLE);

1
尝试了两种方法,但都没有起作用。你确定 INVISIBLE 起作用吗? - Tomáš Hubálek

1
我遇到了与小部件应用程序相同的问题。如果您像那样获得,我检测 appWidgetId 错误。在第一次更新UI时,您必须将 appWidgetId 跟踪到静态变量。然后,我们可以使用该变量作为常规的 appWidgetId 以更新UI。
或者您可以尝试在 onReceiver 函数中使用以下代码: final ComponentName provider = new ComponentName(context, this.getClass()); appWidgetManager.updateAppWidget(provider, views); 其中,views是 RemoteViews
谢谢,抱歉我的英语不好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接