2012-02-05 4 views
4

В моей AppWidgetProvider, я следующее:RemoteViews setViewVisibility на Android Widget

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

ответ

8

Вы пробовали использовать INVISIBLE и не GONE? Gone удалит представление, как будто его там никогда не было. И невидимое будет удерживать место просмотра в макете, но сделать его невидимым.

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

Пробовал оба, но никто не работает. Вы уверены, что НЕВИДИМО работает? –

1

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

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^