viewpager+fragment学习笔记
生活随笔
收集整理的這篇文章主要介紹了
viewpager+fragment学习笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有暇,總結一下viewpager+fragment的使用。
先來看看效果圖:
有三個標題,三個fragment,滑動時標題的顏色會隨著變化。
MainActivity.java
public class MainActivity extends FragmentActivity {private ViewPager vp;private Fragment f1, f2, f3;//把所有的Fragment裝到一個List中private List<Fragment> fs;private FragmentPagerAdapter fpa;private TextView tv1, tv2, tv3;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);vp = (ViewPager) this.findViewById(R.id.vp1);initView();//一個適配器,里邊存的都是Fragmentfpa = new FragmentPagerAdapter(getSupportFragmentManager()) {@Overridepublic int getCount() {return fs.size();}@Overridepublic Fragment getItem(int arg0) {return fs.get(arg0);}};vp.setAdapter(fpa);/*** 三個方法的執行順序為:用手指拖動翻頁時,最先執行一遍onPageScrollStateChanged(1),* 然后不斷執行onPageScrolled,放手指的時候,直接立即執行一次onPageScrollStateChanged(2),* 然后立即執行一次onPageSelected,然后再不斷執行onPageScrolled,* 最后執行一次onPageScrollStateChanged(0)。*/vp.setOnPageChangeListener(new OnPageChangeListener() {/*** position代表哪個頁面被選中*/@Overridepublic void onPageSelected(int position) {switch (position) {case 0:changeTitleBackground(0);break;case 1:changeTitleBackground(1);break;case 2:changeTitleBackground(2);break;default:break;}Log.i("lenve", "onPageSelected"+position);}/*** 有三個參數,第一個position,這個參數要特別注意一下。當用手指滑動時,如果手指按在頁面上不動,* position和當前頁面index是一致的* 如果手指向左拖動(相應頁面向右翻動),這時候position大部分時間和當前頁面是一致的,* 只有翻頁成功的情況下最后一次調用才會變為目標頁面;如果手指向右拖動(相應頁面向左翻動),* 這時候position大部分時間和目標頁面是一致的,只有翻頁不成功的情況下最后一次調用才會變為原頁面。* 當直接設置setCurrentItem翻頁時,如果是相鄰的情況(比如現在是第二個頁面,跳到第一或者第三個頁面),* 如果頁面向右翻動,大部分時間是和當前頁面是一致的,只有最后才變成目標頁面;如果向左翻動,position和目標頁面是一致的。* 這和用手指拖動頁面翻動是基本一致的。* 如果不是相鄰的情況,比如我從第一個頁面跳到第三個頁面,position先是0,然后逐步變成1,* 然后逐步變成2;我從第三個頁面跳到第一個頁面, position先是1,然后逐步變成0,并沒有出現為2的情況。* positionOffset是當前頁面滑動比例,如果頁面向右翻動,這個值不斷變大,最后在趨近1的情況后突變為0。* 如果頁面向左翻動,這個值不斷變小,最后變為0。* positionOffsetPixels是當前頁面滑動像素,變化情況和positionOffset一致。*/// 在屏幕滾動過程中不斷被調用@Overridepublic void onPageScrolled(int position,float positionOffset, int positionOffsetPixels) {Log.i("lenve", "onPageScrolled"+position);}/*** onPageScrollStateChanged(int state):這個方法在手指操作屏幕的時候發生變化。* 有三個值:0(END),1(PRESS) , 2(UP) 。 當用手指滑動翻頁時,手指按下去的時候會觸發這個方法,state值為1* 手指抬起時,如果發生了滑動(即使很小),這個值會變為2,然后最后變為0* 總共執行這個方法三次。一種特殊情況是手指按下去以后一點滑動也沒有發生,這個時候只會調用這個方法兩次,state值分別是1,0 。* 當setCurrentItem翻頁時,會執行這個方法兩次,state值分別為2 , 0 。*/@Overridepublic void onPageScrollStateChanged(int state) {Log.i("lenve", "onPageScrollStateChanged"+state);}});//設置默認顯示頁vp.setCurrentItem(0);}private void initView() {tv1 = (TextView) this.findViewById(R.id.tv1);tv2 = (TextView) this.findViewById(R.id.tv2);tv3 = (TextView) this.findViewById(R.id.tv3);//設置tv1的默認顏色tv1.setTextColor(Color.GREEN);fs = new ArrayList<Fragment>();f1 = new Fragment1();f2 = new Fragment2();f3 = new Fragment3();fs.add(f1);fs.add(f2);fs.add(f3);}//滑動時修改標題顏色private void changeTitleBackground(int i) {switch (i) {case 0:tv1.setTextColor(Color.GREEN);tv2.setTextColor(Color.GRAY);tv3.setTextColor(Color.GRAY);break;case 1:tv1.setTextColor(Color.GRAY);tv2.setTextColor(Color.GREEN);tv3.setTextColor(Color.GRAY);break;case 2:tv1.setTextColor(Color.GRAY);tv2.setTextColor(Color.GRAY);tv3.setTextColor(Color.GREEN);break;default:break;}} }注釋里邊說的比較清楚了,再看看布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.example.viewpagertest.MainActivity" ><LinearLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextView android:id="@+id/tv1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center_horizontal"android:text="f1" /><TextView android:id="@+id/tv2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center_horizontal"android:text="f2" /><TextView android:id="@+id/tv3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center_horizontal"android:text="f3" /></LinearLayout><android.support.v4.view.ViewPager android:id="@+id/vp1"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>另外,三個fragment都是普通的fragment,這里就不貼代碼了。
本項目源碼下載
版權聲明:本文為博主原創文章,未經博主允許不得轉載。若有錯誤地方,還望批評指正,不勝感激。
轉載于:https://www.cnblogs.com/lenve/p/4770542.html
總結
以上是生活随笔為你收集整理的viewpager+fragment学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux系统之更改默认块大小
- 下一篇: B. Quasi Binary