widget转屏后显示的view是新生成的一个对象,与原本显示的view已经不一样了_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > widget转屏后显示的view是新生成的一个对象,与原本显示的view已经不一样了

widget转屏后显示的view是新生成的一个对象,与原本显示的view已经不一样了

 2011/1/17 7:40:01  hanmincheng1982  http://hanmincheng1982.javaeye.com  我要评论(0)
  • 摘要:设计:使用自定义view显示动态变化的内容。比如RSS,Mail,Message等自动接收到的信息。当有内容发生变化的时候,Widget先将Model内容改变,然后呼叫自定义view的invalidate()触发onDraw去刷新页面内容。问题:普通情况下可以正确处理自动刷新,当将手机转屏后会对内容的变化无响应,但是如果手动点击屏幕去触发其刷新是有效果的。原因:widget转屏后显示的view是新生成的一个对象,与原本显示的view已经不一样了。解决:在自定义view中增加一个属性
  • 标签:view 一个
设计:
使用自定义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有关系吗?

谢谢解答
发表评论
用户名: 匿名