2010-04-16 82 views
4

我的主屏幕上有一個小部件,其中包含多個具有默認背景圖像的ImageButton。通過配置活動,我可以更改任何ImageButton上的圖像。問題是當旋轉屏幕時,ImageButton上的圖像消失並且它變回默認圖像。Android小部件ImageButton在旋轉屏幕時丟失圖像

我不知道爲什麼會這樣或如何解決它

回答

8

當屏幕旋轉時,整個appwidget使用您傳遞給AppWidgetManager .updateAppWidget最後RemoteViews對象()重建。因此,每次調用updateAppWidget()時,都必須傳遞一個RemoteViews對象,該對象包含所有設置的RemoteViews對象,以便在完成重新構建時控件所需的所有內容,而不僅僅是要在窗口小部件上更新的一兩件事情顯示。

因此,在您的AppWidgetProvider類中,無論何時更新appwidget,您都需要創建一個RemoteViews對象,使用該對象爲您的appwidget構建所有視圖設置,然後在調用AppWidgetManager.updateAppWidget()時你完成了。

我的猜測是,你正在做的事情是這樣的:

  • 獲得RemoteViews對象
  • 設置新的按鈕圖像
  • 呼叫updateAppWidget()
  • 獲取RemoteViews對象
  • 設定等候意圖按鈕
  • 致電updateAppWidget()

當你需要做這樣的事情:

  • 獲得RemoteViews對象
  • 設置新的按鈕圖像
  • 設定等候的意圖上的按鈕
  • 呼叫updateAppWidget()
+0

這一工程...謝謝! – alejom99 2010-04-16 15:13:09

+0

如果您從兩個位置進行更新,該怎麼辦?又名'OnRecieve'和'OnUpdate' – Doomsknight 2012-09-17 15:51:46

+0

@Doomsknight爲什麼這會有所作爲?只需在兩者中正確更新它。我不確定你的問題如何適用於這裏提出的原始問題。 – 2012-09-17 17:00:19

1

mbaird的答案是唯一的答案。
但還有另一個解決方案。解決方法是在創建/更新小部件的整個視圖時使用updateAppWidget,並且僅在更改視圖的一部分時使用partiallyUpdateAppWidget。然後視圖不會重置。

部分更新例子(顯示在所有小一點點同步圖標):

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);  
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, Widget.class)); 
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 

views.setViewVisibility(R.id.syncImage, View.VISIBLE); 

for (int i = 0; i < appWidgetIds.length; i++) {  
    appWidgetManager.partiallyUpdateAppWidget(appWidgetIds[i], views); 
}