一、现象:
通过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

三、解决:
之前试了很多办法,线程,handler等都没有用。其实像按钮等的监听以及listview等的监听都可以写在oncreate中,需要动态判断显示UI活加载数据的写在onresume中。
解决:将需要动态显示隐藏或要改变值的组件的设置为static,这样ViewPager和TabHost访问的都是同样的属性。

本文探讨了在使用ViewPager和TabHost实现滑动效果时遇到的问题。具体表现为按钮响应失效,尽管能正常加载数据。文章提供了详细的解决方案,包括如何正确设置组件监听以及使用静态变量来确保UI更新的一致性。



184

被折叠的 条评论
为什么被折叠?



