fragment+scrollview 切換fragment自動滾動到頂部
專案中一個MainActivity 裝載了四個Fragment 其中最後一個fragment中包含了一個ScrollView ,ScrollView中還包含了一個GridView(fragment的交替顯示用的是隱藏/顯示,而不是ViewPager裝載fragment,要注意這一點哦)
我的目標是:1: fragment間來回切換時ScrollView自動滑到頂部
2: 從包含ScrollView的Fragment中跳轉至其他Activity後,返回這個Fragment,fragemt依然自動滑到頂部
3: 即使手動將ScrollView滑動至中間部分,以上兩條依然成立
解決方案:1,程式碼中:
設定ScrollView獲取焦點:
scrollView.setFocusable(true);
scrollView.setFocusableInTouchMode(true);
ScrollView.requestFocus();
設定我的ScrollView中的GridView不獲取焦點:
gridView.setFocusable(false);
設定ScrollView滑到頂部:
scrollView.fullScroll(ScrollView.FOCUS_UP);//這個是設定ScrollView滑動到頂部的一種方案 scrollView.scrollTo(0,0);//這是scrollView滑動到頂部的第二種方案 //這兩種的區別就是當用戶切換到包含ScrollView的fragment的時候
//第一種:ScrollView有一個滑動到頂部的動作(一個動畫);
//第二種:看不到滑動的動作,直接看到的就是頂部
2,佈局中:ScrollView的佈局
android:focusable="true"
android:focusableInTouchMode="true"
android:descendantFocusability="beforeDescendants"
為什麼要在佈局和程式碼中兩次設定呢。雙重保險嘛~~只在佈局或者只在程式碼中設定有時就會有問題。。為什麼我也不太懂(求大神指點)
經過這兩方面的設定,依然不能每次都實現所有目標,從其他fragment切換回來還是不能自動置頂(好,重點來啦!!敲黑板兒!!)
思路: 1.fragmennt的生命週期;專案中並不是使用ViewPager裝載Fragment,只是在底部畫了四個佈局,點選切換Fragment,我在包含ScrollView的fragment裡面將Fragment的生命週期全都打印出來,發現並沒有走,最後還是問了別人,知道了一個fragment的方法
@Override
public void onHiddenChanged(boolean hidd) {
if(!hidd){//當fragment從隱藏到出現的時候
scrollView.scrollTo(0,0);
}
}
//從Activity回到包含ScrollView的fragment
//fragment的生命週期,我在重寫了onResume()
<pre name="code" class="java"> @Override
public void onResume() {
super.onResume();
myScrollView.scrollTo(0,0);//從其他Activity回來,讓ScrollView置頂
}
就這樣,把程式碼中,佈局中,fragment的生命週期中(就是以上我寫的所有的程式碼)設定完畢,就完美啦~~沒瑕疵!!!
小菜鳥學習ing...加油↖(^ω^)↗~