【Android笔记】ViewPager实现导航

1、加入ViewPager

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

</android.support.v4.view.ViewPager>

2、加载显示的页卡

将Layout布局转换为View对象java

1.
LayoutInflater if = getLayoutInflater().from(this);
if.inflate(resource, root);

2.
View.inflate(context, resource, root);
View view1 = View.inflate(this, R.layout.view1, null);

3、配置Adapter

1.PagerAdapter   数据源:List<View>

package com.example.demo12;

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

import java.util.List;

/**
 * Created by WANG on 2016/9/30 0030.
 */

public class MyPagerAdapter extends PagerAdapter {

    private List<View> viewList;

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

    /**
     * 返回的是页卡的数量
     * @return
     */
    @Override
    public int getCount() {
        return viewList.size();
    }

    /**
     * View是否来自对象
     * @param view
     * @param object
     * @return
     */
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    /**
     * 实例化一个页卡
     * @param container
     * @param position
     * @return
     */
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        container.addView(viewList.get(position));
        return viewList.get(position);
    }

    /**
     * 销毁一个页卡
     * @param container
     * @param position
     * @param object
     */
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(viewList.get(position));
    }
}

2.FragmentPagerAdapter  数据源:List<Fragment>

因为FragmentPagerAdapter是一次加载全部的Fragment,不能销毁Fragment,因此当须要加载的Fragment比较少时,可使用FragmentPagerAdapter。android

package com.example.demo12;


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

import java.util.List;

/**
 * Created by WANG on 2016/9/30 0030.
 */

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);
        this.fragmentList = fragmentList;
        this.titleList = titleList;
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return titleList.get(position);
    }
}

3.FragmentStatePagerAdapter  数据源:List<Fragment>

FragmentStatePagerAdapter 能够自动维护Fragment的建立与销毁。app

package com.example.demo12;


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

import java.util.List;

/**
 * Created by WANG on 2016/9/30 0030.
 */

public class MyFragmentStatePagerAdapter extends FragmentStatePagerAdapter {

    private List<Fragment> fragmentList;
    private List<String> titleList;


    public MyFragmentStatePagerAdapter(FragmentManager fm, List<Fragment> fragmentList, List<String> titleList) {
        super(fm);
        this.fragmentList = fragmentList;
        this.titleList = titleList;
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return titleList.get(position);
    }

    //建立
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        return super.instantiateItem(container, position);
    }
    //销毁
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        super.destroyItem(container, position, object);
    }
}

4、Adapter里面的经常使用方法

getCount()    //须要返回全部页面的数量

isViewFromObject(View arg0, Object arg1)    //判断试图是否由对象产生
 
instantiateItem(ViewGroup container, int position)    //实例化界面

destroyItem(ViewGroup container, int position, Object object)    //销毁页面

getPageTitle(int position)    //返回页面标题信息

5、PagerTabStrip和PagerTitleStrip

1.PagerTabStrip

1)在ViewPager中加入PagerTabStripide

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

    <android.support.v4.view.PagerTabStrip
        android:id="@+id/tab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:foregroundGravity="top" >

    </android.support.v4.view.PagerTabStrip>

</android.support.v4.view.ViewPager>

2)添加标题并进行一些设置布局

//为页卡设置标题
titleList = new ArrayList<String>();
titleList.add("第一页");
titleList.add("第二页");
titleList.add("第三页");
titleList.add("第四页");

/**
 * 为PagerTabStrip设置一些属性
 */
tab = (PagerTabStrip) findViewById(R.id.tab);
tab.setBackgroundColor(Color.CYAN);    //背景颜色
tab.setTextColor(Color.BLACK);         //文字颜色
tab.setDrawFullUnderline(false);       //tab的底线,不显示
tab.setTabIndicatorColor(Color.BLUE);  //当前选中的tab的底线的颜色

3)在适配器中添加设置this

/**
 * 设置ViewPager的标题
 * @param position
 * @return
 */
@Override
public CharSequence getPageTitle(int position) {
    return titileList.get(position);
}

效果以下:spa

2.PagerTitleStrip

<android.support.v4.view.PagerTitleStrip
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:foregroundGravity="top" >
            
</android.support.v4.view.PagerTitleStrip>

PagerTitleStrip与PagerTabStrip类似,通常使用时选择其中一个。code

6、监听器的使用

添加监听xml

实现OnPageChangeListener接口,实现onPageSelected方法:对象

@Override
public void onPageSelected(int position) {
    Toast.makeText(this, "当前是第" + (position+1) + "界面", Toast.LENGTH_SHORT).show();
}

效果以下:

实例:

//MainActivity.java

package com.example.demo12;

import android.graphics.Color;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

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

public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener{

    private List<View> viewList;
    private ViewPager viewPager;
    private PagerTabStrip tab;
    private List<String> titleList;

    private List<Fragment> fragmentList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        viewList = new ArrayList<View>();

        /**
         * 经过View对象去做为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);

        /**
         * 经过Fragment做为ViewPager的数据源
         */
        fragmentList = new ArrayList<Fragment>();
        fragmentList.add(new Fragment1());
        fragmentList.add(new Fragment2());
        fragmentList.add(new Fragment3());
        fragmentList.add(new Fragment4());

        //为页卡设置标题
        titleList = new ArrayList<String>();
        titleList.add("第一页");
        titleList.add("第二页");
        titleList.add("第三页");
        titleList.add("第四页");

        /**
         * 为PagerTabStrip设置一些属性
         */
        tab = (PagerTabStrip) findViewById(R.id.tab);
        tab.setBackgroundColor(Color.CYAN);    //背景颜色
        tab.setTextColor(Color.BLACK);         //文字颜色
        tab.setDrawFullUnderline(false);       //tab的底线,不显示
        tab.setTabIndicatorColor(Color.BLUE);  //当前选中的tab的底线的颜色

        //初始化ViewPager
        viewPager = (ViewPager) findViewById(R.id.pager);

        /**
         * PagerAdapter
         */
        //建立PagerAdapter的适配器
        MyPagerAdapter adapter = new MyPagerAdapter(viewList, titleList);
        //ViewPager加载适配器
        //viewPager.setAdapter(adapter);

        /**
         * FragmentPagerAdapter
         */
        //建立FragmentPagerAdapter的适配器
        MyFragmentPagerAdapter adapter1 = new MyFragmentPagerAdapter(getSupportFragmentManager(),
                                                                    fragmentList, titleList);
        //ViewPager加载适配器
        viewPager.setAdapter(adapter1);

        viewPager.setOnPageChangeListener(this);
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        Toast.makeText(this, "当前是第" + (position+1) + "界面", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
}
<!--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">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="第一个界面" />

</LinearLayout>
//Fragment1.java
package com.example.demo12;

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

/**
 * Created by WANG on 2016/9/30 0030.
 */

public class Fragment1 extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.view1, container, false);
    }
}
相关文章
相关标签/搜索