本篇文章,詳細講一下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); }}
最後希望大家有所幫助!!!一點一點碼出來也是蠻拼的


