天天看點

android fragment與ViewPager

本篇文章,詳細講一下fragment 與ViewPager的結合。

fragment将在未來占據很大的地位,會被更多的利用,掌握fragment 與ViewPager的結合是必不可少的一項技能。

1.使用時,首先在布局檔案裡

<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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:background="#fff"
    tools:context="text.chen.example.com.test.ViewPagerActivity">




    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_gravity="center">



	<!--是界面上面的tab,顯示目前頁面-->
        <android.support.v4.view.ViewPagerTabStrip
            android:id="@+id/view_tab"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_gravity="center">


        </android.support.v4.view.ViewPagerTabStrip>


        <!--二選一,因為頂部的tab與底部的tab 隻可以同時利用一個-->
        <!--<android.support.v4.view.PagerTitleStrip-->
        <!--android:id="@+id/title"-->
        <!--android:layout_height="wrap_content"-->
        <!--android:layout_width="wrap_content"-->
        <!--android:layout_gravity = "bottom"-->
        <!-->-->


        <!--</android.support.v4.view.PagerTitleStrip>-->


    </android.support.v4.view.ViewPager>




</LinearLayout>
           

2.本文不是講解代碼的,而是講方法的。

1.當fragment裡面的内容較少時,可以利用加載view 的方法來進行:

在java裡面添加:

private List<View> viewList;
//在onCreate方法裡面添加
 viewList = new ArrayList<View>();
        View view1 = View.inflate(this, R.layout.view1, null);
        View view2 = View.inflate(this, R.layout.view2, null);
        View view3 = View.inflate(this, R.layout.view3, null);
        View view4 = View.inflate(this, R.layout.view4, null);
        viewList.add(view1);
        viewList.add(view2);
        viewList.add(view3);
        viewList.add(view4);
           

再為tab添加一些屬性和标題:

<span style="white-space:pre">	</span>private PagerTabStrip tab;
    <span style="white-space:pre">	</span>private List<String> titleList;
<span style="white-space:pre">	</span>//為ViewPager頁卡設定标題
        titleList = new ArrayList<String>();
        titleList.add("first");
        titleList.add("second");
        titleList.add("third");
        titleList.add("four");


        //為PagerTabStrip設定一些屬性
        tab = (PagerTabStrip) findViewById(R.id.view_tab);
        tab.setBackgroundColor(Color.YELLOW);//tab字型顔色
        tab.setTextColor(Color.RED);//字型顔色
        tab.setDrawFullUnderline(false);//橫線消失
        tab.setTabIndicatorColor(Color.GREEN);//訓示器顔色
           

再進行ViewPager的初始化

<span style="white-space:pre">	</span>viewPager = (ViewPager) findViewById(R.id.view_pager);
           

再為其建立PagerAdapter擴充卡

最好為建立一個類繼承與FragmentPagerAdapter,我在做這裡建立的為:MyFragmentPagerAdapter

<span style="white-space:pre">	/**
         * 建立PagerAdapter擴充卡
         */</span>
           
<span style="white-space:pre">	</span>MyPagerAdapter myPagerAdapter = new MyPagerAdapter(viewList, titleList);
        viewPager.setAdapter(myPagerAdapter);
           

這樣即可完成。

2.當fragment裡面函數邏輯較為複雜時,就需要傳fragment進行

<span style="white-space:pre">	</span>private List<Fragment> fragmentList;

        /**
         * 通過Fragment作為VIewPAger的資料源
         *
         */
        fragmentList = new ArrayList<Fragment>();
        fragmentList.add(new Fragment1());
        fragmentList.add(new Fragment2()) ;
        fragmentList.add(new Fragment3()) ;
        fragmentList.add(new Fragment4());
           

此時的擴充卡:

<span style="white-space:pre">	</span>MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getSupportFragmentManager(),fragmentList,titleList);

        viewPager.setAdapter(adapter);
           

最後這個是我的adapter

package text.chen.example.com.test.adapter;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.ViewGroup;

import java.util.List;

/**
 * Created by chen on 15-2-5.
 */
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {

    private List<Fragment> fragmentList;
    private List<String> titleList;
//構造函數的參數依據activity裡面需要傳的參數來設定,例如:<pre name="code" class="java">//fragmentList,在第一種傳view時不需要:
           

public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> fragmentList, List<String> titleList) { super(fm); this.fragmentList = fragmentList; this.titleList = titleList; } @Override public Fragment getItem(int i) { return fragmentList.get(i); } @Override public CharSequence getPageTitle(int position) { return titleList.get(position); } @Override public int getCount() { return fragmentList.size(); } @Override public Object instantiateItem(ViewGroup container, int position) { return super.instantiateItem(container, position); }}

最後希望大家有所幫助!!!一點一點碼出來也是蠻拼的

android fragment與ViewPager
android fragment與ViewPager
android fragment與ViewPager