今天在手机适配中发现漫画播放器的菜单中点击“自动播放”后,文字无法发生改变。后来发现,在点击“自动播放”,菜单消失的瞬间,菜单项文字确实发生了变化,只是再次打开菜单时菜单项文字又变回了“手动播放”,表明setText方法确实被调用并且生效了。Android 2.x的手机上运行不会发生该问题。
初步判断是作为菜单的GridView被重新生成了。但是通过log打印发现情况并非如此。
最后怀疑GridView所使用的SimpleAdapter中的getView被调用,引起菜单项文字被重新初始化。将SimpleAdapter置换成匿名内部类,在getView方法中打印log。发现菜单重新弹出时GridView虽然没有重新生成,但是SimpleAdapter的getView方法确实被重新调用了,引起菜单项重置。这样的话,就在getView中根据播放器的播放状态修改“自动播放”菜单项的文字就可以了。
至此,问题解决。
顺便一提。2.x的系统中菜单重新显示时菜单项没有重新生成。推测可能是4.0系统中在GridView不显示时自动回收了里面的子view,而不是等待GridView被销毁时才回收。