view对象和Fragment分别作为数据源实现ViewPager(导航栏)功能

//由于文件过多,所以请仔细阅读,有看不懂的,可以留言!

//由于是由View和Fragment分别作为ViewPager 数据源,所以需要区分出来看

package com.example.xin.pager;



import java.util.ArrayList;
import java.util.List;


import android.support.v4.app.Fragment;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v7.app.ActionBarActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity implements OnPageChangeListener{
private List<View> viewlist;
private ViewPager vp;//导航栏,理解为一个容器,可以存放由布局文件转化的View对象,也可以存放Fragment,具体怎么将v布局文件转变为View对象,请看下面注释,以及怎么在Fragment内加载布局文件,请看下面单独的文件。
private PagerTabStrip pts;
private List<String>titleList;
private List<Fragment> fragmentlist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp=(ViewPager) findViewById(R.id.pager);
viewlist=new ArrayList<View>();
pts=(PagerTabStrip) findViewById(R.id.tab);
/*
* *1。第一种方法:用view对象作为ViewPager数据源
*/
//将layout转化成View对象
View view1=View.inflate(this, R.layout.view1, null);//这4个文件内容是一样的,都是放着一个TextView代表以后页面中可能出现的内容,为了偷懒,这个布局文件就不上了,因为大家也都会。
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);
//将view添加到viewlist集合中
viewlist.add(view1);
viewlist.add(view2);
viewlist.add(view3);

viewlist.add(view4);

//将标题加入到String集合中

titleList=new ArrayList<String>();
titleList.add("第一页");
titleList.add("第二页");
titleList.add("第三页");
titleList.add("第四页");
/*
* *用Fragment作为ViewPager数据源
*/
fragmentlist=new ArrayList<Fragment>();
fragmentlist.add(new Fragment1());
fragmentlist.add(new Fragment2());
fragmentlist.add(new Fragment3());
fragmentlist.add(new Fragment4());
//为PagerTabStrip(标题栏)添加一些属性
pts.setBackgroundColor(Color.WHITE);
pts.setTextColor(Color.BLACK);
pts.setDrawFullUnderline(false);
pts.setTabIndicatorColor(Color.GREEN);
//创建适配器

//1.用ViewPagerAdapter适配器

                  MyViewPagerAdapter mvpa=new MyViewPagerAdapter(viewlist,titleList);

//2:用FramentPagerAdapter作为适配器
//MyFragmentPagerAdapter mfpa=new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentlist,titleList);

FragmentPagerAdapter2 mfpa2=new FragmentPagerAdapter2(getSupportFragmentManager(), fragmentlist,titleList);

                //加载适配器

vp.setAdapter(mfpa2);
vp.setOnPageChangeListener(this);//添加监听,可以监听当前页面



}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub

}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub

}
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
Toast.makeText(this, "当前是第"+(arg0+1)+"页", 0).show();
}


}



//2.以下文件是Fragment加载layout文件的方法

package com.example.xin.pager;


import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


public class Fragment1 extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.view1, container, false);
}


}//同理,其他的Fragment也是这种方法加载


3.几种适配器类的编写

//1.PagerAdapter适配器

package com.example.xin.pager;


import java.util.List;


import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;


public class MyViewPagerAdapter extends PagerAdapter{


private List<View> viewlist;
private List<String> titleList;

       //构造方法,将View和标题以集合的方式传进来
public MyViewPagerAdapter(List<View> viewlist,List<String> titleList)
{
this.viewlist=viewlist;
this.titleList=titleList;
}
@Override
//返回所有视图的数量
public int getCount() {
// TODO Auto-generated method stub
return viewlist.size();
}


@Override
//判断视图是否由对象产生
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0==arg1;
}
@Override
//实例化页面
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
container.addView(viewlist.get(position));
    return viewlist.get(position);



}
@Override
//删除页面
public void destroyItem(ViewGroup  container, int position, Object object) {
// TODO Auto-generated method stub
container.removeView(viewlist.get(position));
}
@Override

         //添加标题
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return titleList.get(position);
}


}

//2.创建FragmentPagerAdapter类

package com.example.xin.pager;


import java.util.List;


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


public class MyFragmentPagerAdapter extends FragmentPagerAdapter{
private List<Fragment>fragmentlist;
private List<String>titlelist;
public MyFragmentPagerAdapter(FragmentManager fm,List<Fragment> fragmentlist,List<String> titlelist) {
super(fm);
// TODO Auto-generated constructor stub
this.fragmentlist=fragmentlist;
this.titlelist=titlelist;
}


@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return fragmentlist.get(arg0);
}


@Override
public int getCount() {
// TODO Auto-generated method stub
return fragmentlist.size();
}
@Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return titlelist.get(position);
}


}

//创建FragmentStatePagerAdapter类

package com.example.xin.pager;


import java.util.List;


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


public class FragmentPagerAdapter2 extends FragmentStatePagerAdapter{
private List<Fragment>fragmentlist;
private List<String>titlelist;
public FragmentPagerAdapter2(FragmentManager fm,List<Fragment> fragmentlist,List<String> titlelist) {
super(fm);
// TODO Auto-generated constructor stub
this.fragmentlist=fragmentlist;
this.titlelist=titlelist;
}


@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return fragmentlist.get(arg0);
}


@Override
public int getCount() {
// TODO Auto-generated method stub
return fragmentlist.size();
}
@Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return titlelist.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
super.destroyItem(container, position, object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
return super.instantiateItem(container, position);
}


}

//最后是activity_main布局文件

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.xin.pager.MainActivity" >


    <android.support.v4.view.ViewPager
        android:layout_gravity="center" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/pager"
        >
        <android.support.v4.view.PagerTabStrip
             android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tab"
        android:layout_gravity="top" >
            
        </android.support.v4.view.PagerTabStrip>
        
</android.support.v4.view.ViewPager>
</RelativeLayout>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值