您的位置:首页 > 移动开发 > Android开发

Android笔记之ViewPager使用

2013-08-24 01:01 393 查看
说明:1、ViewPager+Fragment组合为google推荐方式,比TabActivity+Activity的效率高的多

2、本文主要介绍如何利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果,不涉及Tabost

3、当滑到title3时,title1的界面被重置,不知怎么解决

一、主布局文件activity_main.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" >

<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" >

<android.support.v4.view.PagerTabStrip
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top" />
</android.support.v4.view.ViewPager>

</LinearLayout>


(1)ViewPager用来管理layout并可以左右滑动显示各个页面数据,PagerTabStrip用来显示页面title

(2)android:layout_gravity="top"表示title在顶部,可设置bottom等。

二.1、主Activity代码

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

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;

public class MainActivity extends FragmentActivity {
/** 多个fragment的list **/
List<Fragment> fragmentList = new ArrayList<Fragment>();
/** 多个String的list **/
List<String>   titleList    = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager vp = (ViewPager)findViewById(R.id.viewPager);

fragmentList.add(new ViewPagerFragment(R.layout.lay1));
fragmentList.add(new ViewPagerFragment(R.layout.lay2));
fragmentList.add(new ViewPagerFragment(R.layout.lay3));
//ViewPagerFragment是自己新建的继承Fragment的类,用来根据参数xml文件的id来返回一个view

titleList.add("title 1 ");
titleList.add("title 2 ");
titleList.add("title 3 ");

vp.setAdapter(new myPagerAdapter(getSupportFragmentManager(), fragmentList, titleList));
//将括号的内容为ViewPagerFragmen适配
}
/**
* 定义ViewPager的适配器:新建类,并创建构造函数接收参数,构造函数在每次新建该类(例如new)都会背调用*/
class myPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragmentList;
private List<String>   titleList;

public myPagerAdapter(FragmentManager fm, List<Fragment> fragmentList, List<String> titleList){
super(fm);
this.fragmentList = fragmentList;
//this.fragmentList为这个类下的变量,右边的fragmentList是构造函数的参数
this.titleList = titleList;
}
/**
* 函数getItem根据int参数返回一个fragment,即一个View,作为当前页面
*/
@Override
public Fragment getItem(int arg0) {
return (fragmentList == null || fragmentList.size() == 0) ? null : fragmentList.get(arg0);
//如果fragmentList为空或者size为0,则返回null,否则返回fragmentList中id为arg0的fragment
}
/**
*函数getPageTitle根据int参数返回一个Stringt,作为当前标题
*/
@Override
public CharSequence getPageTitle(int position) {
return (titleList.size() > position) ? titleList.get(position) : "";
}
/**
* 函数getCount自动返回一个int,即为fragmentList的元素个数,相当与数组的length
*/
@Override
public int getCount() {
return fragmentList == null ? 0 : fragmentList.size();
}
}
}


(1)上面fragmentList.add(new ViewPagerFragment(R.layout.lay1))的部分相当于

fragmentList.add(new fragment1());//fragment1是extends Fragment的类
fragmentList.add(new fragment2());
fragmentList.add(new fragment3());


2、创建ViewPagerFragment以根据layout的布局文件返回View作为不同页面的fragment

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class ViewPagerFragment1 extends Fragment {
private int  lay;
private TextView tv = null;
//构造函数,layId为R.layout.lay1之类的
public ViewPagerFragment1(int layId){
super();
this.lay = layId;
}
/**
* 覆盖此函数,先通过inflater inflate函数得到view最后返回
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View v = inflater.inflate(lay, container, false);
return v;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: