flycatdeng 发表于 2013-1-30 04:01:30

ViewPager+TabHost 实现选项卡页面间滑动,组件不能动态更改UI问题的解决!

<div class="Section0">一、现象:
通过ViewPager+TabHost可以实现点击选项卡滑动,或者通过手势拖动滑动。因为考虑到组件比较多,不能将所有的组件监听响应写在一个类,所以需要既可以在ViewPager中的视图“点击”(以一个按钮为例)响应又能在TabHost中的activity“点击”响应的效果。
很幸运,按钮能响应,但是将按钮组件的监听方法写到onResume方法中的时候,按钮就不能响应了,但是能够打印语句,能加载数据。可以为什么按钮等组件不能更改UI了呢?
 
二、分析:
我在需要滑动的三个activity中的onCreate,onStart,onResume方法中分别打印输出作为判断该方法执行了的方式System.out.println("A onCreate");,,,
结果发现都是ViewPager会将三个Activity的视图添加到自己的队列以便滑动显示,所以一开始三个Activity A B C 都有打印 onCreate和onStart然后再是TabHost添加Activity,当显示A的时候A才打印onresume,但是还是没用,因为这个时候显示的视图都是ViewPager中的View

http://dl.iteye.com/upload/attachment/0077/2143/fd16001d-6753-35da-afae-1b2b6c8aa3e8.png
 
 
三、解决:
之前试了很多办法,线程,handler等都没有用。其实像按钮等的监听以及listview等的监听都可以写在oncreate中,需要动态判断显示UI活加载数据的写在onresume中。
解决:将需要动态显示隐藏或要改变值的组件的设置为static,这样ViewPager和TabHost访问的都是同样的属性。
 
<span style="font-family: '宋体'; font-size: 10.5pt;"><div class="Section0">四、效果:
http://dl.iteye.com/upload/attachment/0077/2139/505d54e5-28b9-309e-9fb2-1b5ccbf35fa8.png
 
http://dl.iteye.com/upload/attachment/0077/2141/6774b084-09cc-352e-aa05-1fb89d177c64.pnghttp://dl.iteye.com/upload/attachment/0077/2137/c350b0e3-d6a3-35c2-8762-1820caa96b41.png
 

五、源码下载:
http://www.kuaipan.cn/file/id_6460760389584413.htm
页: [1]
查看完整版本: ViewPager+TabHost 实现选项卡页面间滑动,组件不能动态更改UI问题的解决!