这几天在写一个android版的音乐播放器,在开发过程中遇到了一些小问题 小bug,最后经过一番调试与查找
终于发现问题所在。现在将开发中的问题与解决方法分享给大家...
一,音乐播放器的界面我采用的是ViewPager+Fragment的方式来实现。
二,底部有四个Tab按钮,采用的是xml的组合模板+自定义的view布局方式来实现,四个Tab按钮名分别为
音乐 播放 专辑 设置
。
图片:
三,开发过程中遇到的Bug :
1,当从设置按钮界面切换到播放按钮界面时播放界面上的播放图标按钮又变成默认的暂停状态。(猜想:可能是fragment又重新绘制了界面
系统自动调用里onCreateView()方法)
2,我在设置按钮界面的onCreateView()方法里设置了一个Toast通知,当我点击专辑按钮时,弹出里Toast通知里的消息(专辑按钮里没有添加任何Toast)。(猜想:可能是一个Fragment的重绘
引起了另一个fragment的重绘)
三,解决方法
1,根据上述的猜想,经过调试验证,猜想正确。所以你可以在fragment里设置一个成员属性的标记值,在onCreateView根据这个标记值
作一个 if 语句的条件进行判断,将fragment所加载的xml布局代码View view =
inflater.inflate(resource, root,
attachToRoot);放在此if语句里,确保只执行一次(即修改标记值),即可解决fragment的多次加载xml布局文件 和
界面刷新问题。
,2,将fragment作为ViewPager的适配器资源时。当用户滑动界面进行页面切换时,可能出现
fragment的重绘问题,fragment的view有缓存则界面无需重绘,切换一个fragmenet的同时也可能会引起另一个fragment的重新绘制(onCreatView())
当fragment作为(加入到)ViewPager的资源显示页时,其已经缓存在viewpager中,只不过在每次页面滑动时又会走onCreatView()方法使数据改变,为保证数据不变应添加一个标记
保证重绘界面(onCreatView()里的方法)只执行一次即可。
结语:由于本文是博主的亲身经历,技术水平有限。文中若有不对或各位有不同观点的,大家可以评论指正,此篇博文希望对大家有所帮助..........