设计:
使用
自定义view显示动态变化的内容。比如
RSS,Mail,Message等自动接收到的信息。
当有内容发生变化的时候,Widget先将Model内容改变,然后呼叫自定义view的invalidate()
触发onDraw去刷新页面内容。
问题:
普通情况下可以正确处理自动刷新,当将手机转屏后会对内容的变化无响应,但是如果手动点击
屏幕去
触发其刷新是有效果的。
原因:
widget转屏后显示的view是新生成的一个对象,与原本显示的view已经不一样了。
解决:
在自定义view中增加一个属性,记录当前显示view的引用,这样当有内容变化的时候去刷新此
引用,可实现实时刷新内容。
用RemoteView中的setInt(int viewId, String methodName, int value) 來搭配View中的setBackgroundResource (int resid) 應該可行..用法如下:
xxx.setInt(R.id.widget, "setBackgroundResource ",R.drawable.carrystick_bg1)
正确。哈哈,最后是看了music的widget的源码,
发现原来它用了2个刷新,如果id存在就用updateAppWidget(int[] appWidgetIds, RemoteViews views) 刷新,如果ID不存在就用的updateAppWidget(ComponentName provider, RemoteViews views) ,跟着它的写法。在onUpdate函数中检测int[] appWidgetids,如果为NULL,就用第2个函数刷新就OK了。。。.这个函数Set the RemoteViews to use for all AppWidget instances for the supplied AppWidget provider。问题暂时得到解决。。
比如有一个天气预报的竖屏下296dp*92dp的AppWidget,需要横屏显示怎么弄,需要再做一个横屏下的AppWidget吗?
请有经验的解答一下。
还有一个就是SDK2.1下的APIDEMO中的AppWidget
例子无法实现定时更新(根据
XML里面的android:updatePeriodMillis),但是SDK1.5下面的就可以自动更新?这是为什么呢,和SDK有关系吗?
谢谢解答