总的来讲,这个TAB用起来还算方便吧html
不过随着用的地方多起来,发现了一些问题,好比下面这个界面:java
TAB1和TAB2都是表单,保存按钮对两个TAB都有效:若当前显示TAB1,点击保存则保存TAB1的form;若当前显示TAB2,点击保存则TAB2的form。如今的状况是,在每一个TAB的fragment中都拿到这个保存的button,而后对其设置click事件,如此操做可能有这样的一个结果:打开这个界面,什么也不操做,直接点击保存,这个时候保存的是TAB2的form,而当前显示的倒是TAB1。ide
这个问题困扰了好久,尝试了不少方法:this
一、给TAB标签的onclick事件中加入调用fragment的onResume(),手动去调fragment的onResume方法,在fragment的onResume()中设置button的onclick事件。点击TAB便可改变button的监听器,可是对于直接进页面就点击保存按钮仍然无效;code
二、给viewpage的滑动事件中添加调用fragment的onResume(),这个方法和方法1效果相似;orm
三、想:通常状况不多有人打开界面以后直接点击保存,都会作一些界面操做,好比,输入文本之类,因此想到给TAB1的fragment中设置一个OnTouchListener,这个只要用户对TAB1界面操做,在OnTouchListener中捕捉到,而后对button设置click,这样就OK了。即便用户进入界面,什么不操做直接点击保存,也不会出现保存错误的问题。htm
虽然想要的效果实现了,可是内心感受仍是很不爽,总感受有个疙瘩。今天无心中看到一篇博文:“Fragment真正意义上的onResume和onPause:Fragment虽然有onResume和onPause的,可是这两个方法是Activity的方法,调用时机也是与Activity相同,和ViewPager搭配使用这个方法就很鸡肋了,根本不是你想要的效果”,拿过来一试,果真很爽。blog
在TAB的fragment中重写它的setUserVisibleHint(),以下:事件
@Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(isVisibleToUser){ activity.findViewById(R.id.bt_title_Right).setOnClickListener(this); } }
很好的结果了这个问题,在此感谢:农民伯伯。get