这是我们的主页面
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager //这是实现页面切换所用到的组件
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/viewpager"
>
<android.support.v4.view.PagerTabStrip //这是头部的菜单栏 是ViewPager的子标签
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>
</LinearLayout>
下面我们看一下页面的布局,由于是展示所以做的比较简单,容易说明问题,四个布局文件用来显示下面的界面用的。
view1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/view1"
android:text="第一个界面"
/>
</LinearLayout>
其他三个布局文件都是一样的。
我们想要的布局文件已经准备好了,下面我们把它们连接起来。MainActivity如下:
public class MainActivity extends ActionBarActivity {
List<View>viewlist;
ViewPager viewpager;
PagerTabStrip tab;
List<String>titlelist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
viewlist=new ArrayList<View>(); //用来装界面视图的数组如‘第一界面’'
titlelist=new ArrayList<String>(); //用来装头部的数组,如第一页、第二页
viewpager=(ViewPager) findViewById(R.id.viewpager); //初始化viewpager组件
//将视图加入数组
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);
//添加头部菜单栏
titlelist.add("第一页");
titlelist.add("第二页");
titlelist.add("第三页");
titlelist.add("第四页");
//添加适配器
viewpager.setAdapter(new MyAdater(viewlist,titlelist)); //利用适配器,将视图组和标题组传过去适配器进行处理
}
我们需要用到的一个适配器是PagerAdapter,我们新建一个MyAdater类继承这个PagerAdapter,设置好适配器之后给ViewPager调用。
public class MyAdater extends PagerAdapter{
List<View> viewlist=new ArrayList<View>();
List<String> titlelist=new ArrayList<String>();
public MyAdater(List<View> viewlist,List<String> titlelist) { //接收视图组和标题组
super();
this.viewlist = viewlist;
this.titlelist=titlelist;
}
@Override
public int getCount() { //获得界面的个数,以便下面的定位。不然适配器无法工作
// TODO Auto-generated method stub
return viewlist.size();
}
//,并加载position页。position是一个int型数据,以0开始。
@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) {
//由于上面已经将视图加进容器中,即将不显示的页面进行销毁。若再次显现即会调用instantiateItem方法
// 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);
}
}
//这是个人理解,欢迎各位进行交流,祝您们工作愉快,身体健康