本篇文章,详细讲一下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); }}
最后希望大家有所帮助!!!一点一点码出来也是蛮拼的


