自定義的帶tab的可左右滑動的viewpager之二viewpager與fragment不兼容

總的來講,這個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


參考:http://www.cnblogs.com/over140/p/3392164.html

相關文章
相關標籤/搜索