ViewPager的简单应用(二)


前面学习了ViewPager的简单应用,但是那是简单的直接加载View,但是实际的情况更多会采用fragment的方式。


这一章就来学习一下ViewPager加载Fragment。


首页看一下结构目录



这里layout跟第一章的跟前面的基本一样,只是每个View对应了一个fragment。

package com.example.lolli.viewpager;
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;
/**
 * Created by lolli on 2016/3/19.
 */
public class Fragment1 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.view1, container, false);
    }
}

现在主要看看关于Activity的处理:

package com.example.lolli.viewpager;

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

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

/**
 * 因为要获取FragmentAdapterManager,这里我们必须继承FragmentActivity
 */
public class MainActivity extends FragmentActivity {
    //  定义控件
    private ViewPager viewPager;
    // 定义fragment集合
    private List<Fragment> fragmentList;
    // 定义标题集合
    private List<String> titleList;
    // 定义一个FragmentAdapter
    private MyFragmentAdapter myFragmentAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 初始化控件
        viewPager = (ViewPager) findViewById(R.id.viewPager);
        // 初始化fragment数据
        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("标题四");
        // 实例化一个FragmentAdapter
        myFragmentAdapter = new MyFragmentAdapter(getSupportFragmentManager(), fragmentList, titleList);
        // setAdapter
        viewPager.setAdapter(myFragmentAdapter);

        // 设置页面改变监听    》  这里是add , 不是set
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }
            @Override
            public void onPageSelected(int position) {
                Toast.makeText(MainActivity.this, "当前第" + (position+1) + "页,共" + myFragmentAdapter.getCount() + "页", Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
    }
}


这里发现我们用的不是PagerAdapter了   转用了FragmentPagerAdapter,我们再看看我们重写的这个FragmentPagerAdapter:


package com.example.lolli.viewpager;

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

import java.util.List;

/**
 * Created by lolli on 2016/3/19.
 */
public class MyFragmentAdapter extends FragmentPagerAdapter{

    // fragment集合
    public List<Fragment> fragmentList;
    // 标题
    public List<String> titleList;

    /**
     * 有参构造
     * @param fm
     * @param fragmentList
     * @param titleList
     */
    public MyFragmentAdapter(FragmentManager fm, List<Fragment> fragmentList, List<String> titleList) {
        super(fm);
        this.fragmentList = fragmentList;
        this.titleList = titleList;
    }

    /**
     * 获取页卡
     * @param position
     * @return
     */
    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    /**
     * 获取页卡数量
     * @return
     */
    @Override
    public int getCount() {
        return fragmentList.size();
    }

    /**
     * 获取页面标题
     * @param position
     * @return
     */
    @Override
    public CharSequence getPageTitle(int position) {
        return titleList.get(position);
    }
}


这里没有重写销毁的那个方法,他应该是一次性全部加载出了所有的fragment。


最后看看效果:















发布了53 篇原创文章 · 获赞 4 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章