关闭

ViewPager使用方法

标签: androidviewpager
215人阅读 评论(0) 收藏 举报
分类:

ViewPager介绍

ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view。

从这个描述中我们知道几点:

1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。

2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。

3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。

在编写ViewPager的应用的使用,还需要使用两个组件类分别是PagerTitleStrip类和PagerTabStrip类,PagerTitleStrip类直接继承自ViewGroup类,而PagerTabStrip类继承PagerTitleStrip类,所以这两个类也是容器类。但是有一点需要注意,在定义XML的layout的时候,这两个类必须是ViewPager标签的子标签,不然会出错。
layout.xml:

<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"
    tools:context=".MainActivity" >

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

        <android.support.v4.view.PagerTabStrip
            android:id="@+id/tabstrip"
            android:layout_width="wrap_content"
            android:layout_height="50dip"
            android:gravity="center" />
    </android.support.v4.view.ViewPager>

</RelativeLayout>

View的加载

我们先写ViewPager的适配器:
MyPagerAdapter.java

import java.util.List;

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

public class MyPagerAdapter extends PagerAdapter{
    private List<View> viewList;

    public MyPagerAdapter(List<View> viewList){
        this.viewList = viewList;
    }

    /**
     * 返回页卡的数量
     */
    @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);
//      return super.instantiateItem(container, position);
    }

    /**
     * 销毁一个页卡
     */
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // TODO Auto-generated method stub
        container.removeView(viewList.get(position));
//      super.destroyItem(container, position, object);
    }

    /**
     * 返回页面标题信息
     */
//  @Override
//  public CharSequence getPageTitle(int position) {
//      // TODO Auto-generated method stub
//      return viewTitle.get(position);
//  }
}

然后写主函数,这里省略了xml中的代码。
VPagerActivity.java

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

import com.hch.svpre.R;
import com.hch.svpre.adapter.MyPagerAdapter;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.View;

public class VPagerActivity extends Activity {
    private ViewPager viewPager;
    private List<View> listView;
    private MyPagerAdapter pagerAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_viewpager);
        initData();
        initView();
    }

    private void initData() {
        // TODO Auto-generated method stub
        listView = new ArrayList<View>();

        View view1 = View.inflate(this, R.layout.viewpager1, null);
        View view2 = View.inflate(this, R.layout.viewpager2, null);
        View view3 = View.inflate(this, R.layout.viewpager3, null);
        View view4 = View.inflate(this, R.layout.viewpager4, null);
        listView.add(view1);
        listView.add(view2);
        listView.add(view3);
        listView.add(view4);
    }

    private void initView() {
        // TODO Auto-generated method stub
        viewPager = (ViewPager) this.findViewById(R.id.vpView);

        pagerAdapter = new MyPagerAdapter(listView);
        viewPager.setAdapter(pagerAdapter);

//      滑动监听器
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(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 onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub

            }
        });
    }
}

与Fragment“合作”

简单点儿说,这里只需要把上面的View数组改为Fragment数组即可,但这里需要注意几个方面:

1)主函数继承FragmentActivity,而不是Activity。
2)Fragment要使用v4的包,也就是android.support.v4.app.Fragment。

下面为示例代码:
VPFragActivity.java

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

import com.hch.svpre.R;
import com.hch.svpre.activity.fragment.VPFragment1;
import com.hch.svpre.activity.fragment.VPFragment2;
import com.hch.svpre.activity.fragment.VPFragment3;
import com.hch.svpre.activity.fragment.VPFragment4;
import com.hch.svpre.adapter.MyFragmentPagerAdapter;

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

public class VPFragActivity extends FragmentActivity{
    private ViewPager viewPager;
    private List<Fragment> listFragment;
    private MyFragmentPagerAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_viewpager);
        initData();
        initView();
    }

    private void initData() {
        // TODO Auto-generated method stub
        listFragment = new ArrayList<Fragment>();
        listFragment.add(new VPFragment1());
        listFragment.add(new VPFragment2());
        listFragment.add(new VPFragment3());
        listFragment.add(new VPFragment4());
    }

    private void initView() {
        // TODO Auto-generated method stub
        viewPager = (ViewPager) this.findViewById(R.id.vpView);

        adapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), listFragment);
        viewPager.setAdapter(adapter);
    }
}

MyPagerAdapter.java

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> listFragment;

    public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> listFragment) {
        super(fm);
        // TODO Auto-generated constructor stub
        this.listFragment = listFragment;
    }

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

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return listFragment.size();
    }
}

Fragment函数

import com.hch.svpre.R;

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

public class VPFragment1 extends Fragment{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view = inflater.inflate(R.layout.viewpager1, container, false);
        return view;
    }
}

这里只写出一个Fragment函数,应写4个就可以,这里只是举个例子。
FrgmentPagerAdapter与FragmentStatePaterAdapter的区别;
使用FragmentPagerAdapter适配器不会运行Fragment函数中onDestroy()的方法,就是不会销毁,而后者会销毁。
注意:ViewPager中存在缓存机制,当你在第二页时,它会缓存第一和第三页,而第四页和其他页会自动销毁。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场