RemoteViews setViewVisibility на Android Widget - PullRequest
6 голосов
/ 06 февраля 2012

В моем 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, изменение на самом деле не отражается на пользовательском интерфейсе. Что может быть не так? Большое спасибо!

Ответы [ 2 ]

11 голосов
/ 08 февраля 2012

Вы пытались использовать невидимый, а не ушел?Унесенные будут удалять вид, как будто его никогда не было.И невидимый будет держать место представления в макете, но сделает его невидимым.

 rv.setViewVisibility(R.id.page1, View. INVISIBLE);
1 голос
/ 05 декабря 2014

У меня та же проблема с приложением виджета.Я обнаружил appWidgetId неправильно, если вы получили это.При первом обновлении пользовательского интерфейса вы должны отслеживать appWidgetId в статической переменной.И затем мы можем использовать эту переменную как общую appWidgetId для обновления пользовательского интерфейса.

Или вы можете попробовать код ниже в onReceiver функции:

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

который просматривает RemoteViews .

Спасибо, извините за мой английский.

...