通常都是ScrollView滑動而後包裹TabLayout+ViewPager+Fragmentandroid
在Fragment內包含 WebView、ListView、或者GridView之類的ide
一、設置ScrollView獲取焦點:佈局
mVideoScrollview.setFocusable(true); mVideoScrollview.setFocusableInTouchMode(true); mVideoScrollview.requestFocus();
二、設置ScrollView滑到頂部動畫
//第一種:ScrollView有一個滑動到頂部的動做(一個動畫); mVideoScrollview.fullScroll(ScrollView.FOCUS_UP); //第二種沒有滑動動做直接到頂部 mVideoScrollview.scrollTo(0,0);
三、設置個人ScrollView中的GridView之類的不獲取焦點:生命週期
mVideotwoLisview.setFocusable(false);
佈局中:ScrollView的佈局it
android:focusable="true" android:focusableInTouchMode="true" android:descendantFocusability="beforeDescendants"
爲何要在佈局和代碼中兩次設置呢。雙重保險嘛~~只在佈局或者只在代碼中設置有時就會有問題List
通過這兩方面的設置,依然不能每次都實現全部目標,從其餘fragment切換回來仍是不能自動置頂(好,重點來啦!!敲黑板兒!!)fragment
思路: 1.fragmennt的生命週期;項目中並非使用ViewPager裝載Fragment,只是在底部畫了四個佈局,點擊切換Fragment,我在包含ScrollView的fragment裏面將Fragment的生命週期全都打印出來,發現並無走,最後仍是問了別人,知道了一個fragment的方法request
@Override public void onHiddenChanged(boolean hidd) { if(!hidd){//當fragment從隱藏到出現的時候 scrollView.scrollTo(0,0); } }
//從Activity回到包含ScrollView的fragment //fragment的生命週期,我在重寫了onResume() @Override public void onResume() { super.onResume(); myScrollView.scrollTo(0,0);//從其餘Activity回來,讓ScrollView置頂 }
代碼中,佈局中,fragment的生命週期中(就是以上我寫的全部的代碼)設置完畢scroll