ViewPager组件的作用是实现左右横划换页,如下图所示(图片来源于网络)
需要的组件:
1)main.XML中需要加载ViewPager还有PagerTabStrip
PagerTabStrip的作用相当于每页的标题,如图中的热门商区,热门分类
代码如下:
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
<android.support.v4.view.PagerTabStrip
android:id="@+id/tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"></android.support.v4.view.PagerTabStrip>
</android.support.v4.view.ViewPager>
2)XML中还需要加入页面,相当于在这些页面中换页 ,等等需要好几个页面(复制粘贴贴了4个)
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="第一个界面"/>
3)编写pager的适配器的类
public class MyPageAdapter extends PagerAdapter{
private List<View>VL;
private List<String>TL;
public MyPageAdapter(List<View>vl,List<String>tl){
this.VL=vl;
this.TL=tl;
}
//相当于是返回的页卡数量
@Override
public int getCount() {
return VL.size ();
}
//View是否来来自于这个对象
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
//实例化一个页卡
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView (VL.get(position));
return VL.get (position);
}
//销毁一个页卡
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView (VL.get (position));
}
//设置Pager标题
@Override
public CharSequence getPageTitle(int position) {
return TL.get (position);
}
}
4)为了练习fragment,多写了一个fragment的适配器的类,他和pageradapter相比少了销毁页卡等的一点点功能
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private List<Fragment>FL;
private List<String>TL;
public MyFragmentPagerAdapter(FragmentManager fm,List<Fragment>DL,List<String >TL) {
super (fm);
this.FL=DL;
this.TL=TL;
}
@Override
public Fragment getItem(int position) {
return FL.get(position);
}
@Override
public int getCount() {
return FL.size ();
}
}
5)多写几个fragment的类,作为数据源传入fragmentList
public class Fragment1 extends android.support.v4.app.Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate (R.layout.view1,container,false);
}
}
6)MainActivity中:
public class MainActivity extends FragmentActivity {
private List<View>VL;
private ViewPager VP;
private PagerTabStrip tab;
private List<String>TL;
private List<Fragment>FL;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.main);
//VL存放View数据源.通过View对象座位数据源建立适配器(pageadap)
VL=new ArrayList<View> ();
//titlelist为页卡设置标题
TL=new ArrayList<String> ();
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);
VL.add (view1);
VL.add (view2);
VL.add (view3);
VL.add (view4);
TL.add ("第一页");
TL.add ("第二页");
TL.add ("第三页");
TL.add ("第四页");
//为pagertitle设置属性
tab= (PagerTabStrip) findViewById (R.id.tab);
tab.setBackgroundColor (Color.WHITE);
tab.setTextColor (Color.RED);
tab.setDrawFullUnderline (false);
tab.setTabIndicatorColor (Color.GREEN);
//通过fragment作为数据源
FL=new ArrayList<> ();
FL.add (new Fragment1());
FL.add (new Fragment2());
FL.add (new Fragment3());
FL.add (new Fragment4());
VP= (ViewPager) findViewById (R.id.pager);
//新建一个适配器
MyPageAdapter adapter=new MyPageAdapter (VL,TL);
//给ViewPager加载适配器
// VP.setAdapter (adapter);
MyFragmentPagerAdapter adapter1=new MyFragmentPagerAdapter (getSupportFragmentManager (),FL,TL);
VP.setAdapter (adapter);
}
}