自定义的带tab的可左右滑动的viewpager之二viewpager与fragment不兼容
2013-10-29 21:29
701 查看
总的来说,这个TAB用起来还算方便吧
不过随着用的地方多起来,发现了一些问题,比如下面这个界面:
TAB1和TAB2都是表单,保存按钮对两个TAB都有效:若当前显示TAB1,点击保存则保存TAB1的form;若当前显示TAB2,点击保存则TAB2的form。现在的情况是,在每个TAB的fragment中都拿到这个保存的button,然后对其设置click事件,如此操作可能有这样的一个结果:打开这个界面,什么也不操作,直接点击保存,这个时候保存的是TAB2的form,而当前显示的却是TAB1。
这个问题困扰了很久,尝试了很多方法:
1、给TAB标签的onclick事件中加入调用fragment的onResume(),手动去调fragment的onResume方法,在fragment的onResume()中设置button的onclick事件。点击TAB即可改变button的监听器,但是对于直接进页面就点击保存按钮仍然无效;
2、给viewpage的滑动事件中添加调用fragment的onResume(),这个方法和方法1效果类似;
3、想:一般情况很少有人打开界面之后直接点击保存,都会做一些界面操作,比如,输入文本之类,所以想到给TAB1的fragment中设置一个OnTouchListener,这个只要用户对TAB1界面操作,在OnTouchListener中捕捉到,然后对button设置click,这样就OK了。即使用户进入界面,什么不操作直接点击保存,也不会出现保存错误的问题。
虽然想要的效果实现了,但是心里感觉还是很不爽,总感觉有个疙瘩。今天无意中看到一篇博文:“Fragment真正意义上的onResume和onPause:Fragment虽然有onResume和onPause的,但是这两个方法是Activity的方法,调用时机也是与Activity相同,和ViewPager搭配使用这个方法就很鸡肋了,根本不是你想要的效果”,拿过来一试,果然很爽。
在TAB的fragment中重写它的setUserVisibleHint(),如下:
很好的结果了这个问题,在此感谢:农民伯伯。
参考:/article/4602872.html
不过随着用的地方多起来,发现了一些问题,比如下面这个界面:
TAB1和TAB2都是表单,保存按钮对两个TAB都有效:若当前显示TAB1,点击保存则保存TAB1的form;若当前显示TAB2,点击保存则TAB2的form。现在的情况是,在每个TAB的fragment中都拿到这个保存的button,然后对其设置click事件,如此操作可能有这样的一个结果:打开这个界面,什么也不操作,直接点击保存,这个时候保存的是TAB2的form,而当前显示的却是TAB1。
这个问题困扰了很久,尝试了很多方法:
1、给TAB标签的onclick事件中加入调用fragment的onResume(),手动去调fragment的onResume方法,在fragment的onResume()中设置button的onclick事件。点击TAB即可改变button的监听器,但是对于直接进页面就点击保存按钮仍然无效;
2、给viewpage的滑动事件中添加调用fragment的onResume(),这个方法和方法1效果类似;
3、想:一般情况很少有人打开界面之后直接点击保存,都会做一些界面操作,比如,输入文本之类,所以想到给TAB1的fragment中设置一个OnTouchListener,这个只要用户对TAB1界面操作,在OnTouchListener中捕捉到,然后对button设置click,这样就OK了。即使用户进入界面,什么不操作直接点击保存,也不会出现保存错误的问题。
虽然想要的效果实现了,但是心里感觉还是很不爽,总感觉有个疙瘩。今天无意中看到一篇博文:“Fragment真正意义上的onResume和onPause:Fragment虽然有onResume和onPause的,但是这两个方法是Activity的方法,调用时机也是与Activity相同,和ViewPager搭配使用这个方法就很鸡肋了,根本不是你想要的效果”,拿过来一试,果然很爽。
在TAB的fragment中重写它的setUserVisibleHint(),如下:
@Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(isVisibleToUser){ activity.findViewById(R.id.bt_title_Right).setOnClickListener(this); } }
很好的结果了这个问题,在此感谢:农民伯伯。
参考:/article/4602872.html
相关文章推荐
- 自定义的带tab的可左右滑动的viewpager之二viewpager与fragment不兼容
- 自定义的带tab的可左右滑动的viewpager之三fragment之间信息的传递
- Fragment利用ViewPager实现左右滑动--第三方开源--SlidingTabLayout和SlidingTabStrip实现
- Android自定义LinearLayout实现左右侧滑菜单,完美兼容ListView、ScrollView、ViewPager等滑动控件
- 自定义的带tab的可左右滑动的viewpager之一 简单实现
- TabLayout+View Pager+Fragment 实现页面左右滑动切换
- ViewPager+Fragment实现支持左右滑动的Tab
- fragment+viewpager+tablayou实现滑动切换页面
- Android之实现ViewPager+Fragment左右滑动
- Android ViewPager + Fragment 自定义滑动标签
- 能够兼容ViewPager的自定义ScrollView,解决滑动反弹
- 仿百度壁纸客户端(一)——主框架搭建,自定义Tab+ViewPager+Fragment
- 使用TabLayout和ViewPager实现左右滑动选项卡
- 自学android笔记之TabLayout结合ViewPager和Fragment实现多页面滑动
- Android Studio 使用ViewPager + Fragment实现滑动菜单Tab效果 --简易版
- TabLayout+ViewPager+Fragment+NDK+WebView+动画+自定义View+AIDL+xUtils+Fresco
- ViewPager,TabLayout,Fragment实现tabs滑动
- 横向菜单滑动选择viewpager+tablayout+fragment
- 利用ViewPageIndicator+ViewPager实现左右滑动带图标tab标签功能