Android开发---Viewpager+Fragment使用指南

Viewpager+Fragment

使用步骤:

一.导入jar包

android-support-v4.jar

二.Activity布局

<android.support.v4.view.ViewPager

            android:id="@+id/vp"

android:layout_width="match_parent"

android:layout_height="match_parent"

           android:flipInterval="3000"à动画效果

            android:persistentDrawingCache="animation"/>à内存设置

 

 

 

三.Activity代码

继承FragmentActivity

1.变量

1. .选项卡及数组

private RelativeLayout mTab1;

private RelativeLayout mTab2;

private RelativeLayout mTab3;

private RelativeLayout mTab4;

privateRelativeLayout[] arrBtn = new RelativeLayout[4];

 

2.滑动页容器

ViewPagerviewPager;

 

3.碎片集合

private List<BaseFragment>fragments;à创建碎片的父类

// 碎片对象

private BaseFragment m1 =null;

private BaseFragment m2 =null;

private BaseFragment m3 =null;

private BaseFragment m4 =null;

 

4.碎片适配器

private MyFragmentAdapteradapter;à创建碎片适配器

 

2.onCreate()

@Override

protected void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

 

initView();

 

initData();

 

initListener();

       

//设置初始值

viewPager.setCurrentItem(0);

setColor(0);

    }

3.封装的方法

(1)initView()

private void initView() {

        mTab1 = (RelativeLayout)findViewById(R.id.btn1);

        mTab2 = (RelativeLayout)findViewById(R.id.btn2);

        mTab3 = (RelativeLayout)findViewById(R.id.btn3);

        mTab4 = (RelativeLayout)findViewById(R.id.btn4);

//把选项卡添加到数组中

arrBtn[0] = mTab1;

arrBtn[1] = mTab2;

arrBtn[2] = mTab3;

arrBtn[3] = mTab4;

 

//滑动页容器

viewPager = (ViewPager)findViewById(R.id.vp);

    }

 

 

 

(2)initData()

private void initData() {

// 准备碎片

        m1 = new ListFragment();

        m2 = new ListFragment();

        m3 = new ListFragment();

        m4 = new OptionFragment();

 

        // 官方存值

        Bundle b1 = new Bundle();

b1.putString("key","image");

m1.setArguments(b1);

 

        Bundle b2 = new Bundle();

b2.putString("key","audio");

        m2.setArguments(b2); -------------------------------à放入参数

 

        Bundle b3 = new Bundle();

b3.putString("key","video");

m3.setArguments(b3);

 

        // 非官方

m1.setList(MediaUtils.getImageList(this));

m2.setList(MediaUtils.getAudioList(this));

m3.setList(MediaUtils.getVideoList(this));

 

//把碎片添加到碎片集合中去

fragments = new ArrayList<BaseFragment>();

fragments.add(m1);

fragments.add(m2);

fragments.add(m3);

fragments.add(m4);

 

        // 实例化适配器

        adapter = new MyFragmentAdapater(getSupportFragmentManager());àFragment Activity关联

        adapter.setFragments(fragments);// 添加数据

viewPager.setAdapter(adapter);// 关联适配器

    }

 

 

(3)initListener()

private void initListener() {

        // 添加按钮的监听

for (int i = 0; i <arrBtn.length; i++) {

arrBtn[i].setOnClickListener(this);

        }

        // 添加滑动页的监听

viewPager.setOnPageChangeListener(this);

    }

 

4.事件回调函数

(1)单击事件

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn1:

                viewPager.setCurrentItem(0);// 第一页

break;

case R.id.btn2:

                viewPager.setCurrentItem(1);// 第二页

break;

case R.id.btn3:

                viewPager.setCurrentItem(2);// 第二页

break;

case R.id.btn4:

                viewPager.setCurrentItem(3);// 第二页

break;

default:

break;

        }

 

    }

 

(2)滑动事件

@Override

public void onPageScrolled(inti, float v, int i2) {

        // 滑动过程中...(写动画)

    }

 

    @Override

public voidonPageSelected(int i) {

// 核心事件

        //页面被选中(当前页面已经显示了90%的面积)

setColor(i);

    }

 

    @Override

public voidonPageScrollStateChanged(int i) {

        // 滑动的状态改变

    }

 

(3)设置选项卡变色

/**

     * 1.将所有的背景统一颜色

     * 2.将当前选中的背景设置特殊颜色

     * @param index

     */

public void setColor(int index){

for (int i = 0;i<arrBtn.length; i++){

arrBtn[i].setBackgroundColor(Color.BLUE);

        }

       arrBtn[index].setBackgroundColor(Color.GREEN);// 特殊

    }

 

(三)创建碎片的子类

public class ListFragmentextends BaseFragment {

 

    @Override

    public View onCreateView(LayoutInflaterinflater,// 反射器

                             ViewGroupcontainer, //容器对象(没用)

                             BundlesavedInstanceState) {// 保存状态的对象(没用)

        // 反射视图

        View view =inflater.inflate(R.layout.fragment_list, container, false);

        // 获取参数值

        Bundle b = getArguments();

        String s =b.getString("key");

lv = (ListView)view.findViewById(R.id.lv);

adapter = newMyAdapter(getActivity());

        getData(s);// 拿数据

return view;

}

 

    MyAdapter adapter;

    ListView lv;

private void getData(String s){

adapter.setList(list);

lv.setAdapter(adapter);

    }

}

 

四.其他类

创建碎片的父类

public class BaseFragmentextends Fragment {

publicList<MediaUtils.MediaInfo> list;

public voidsetList(List<MediaUtils.MediaInfo> list) {

        this.list = list;

    }

}

 

创建碎片适配器

public class MyFragmentAdapterextends FragmentPagerAdapter {

 

privateList<BaseFragment> fragments;

 

    /**

     * 构造器

     * 碎片管理器

     * @param fm

     */

publicMyFragmentAdapter(FragmentManager fm) {

super(fm);

    }

 

public voidsetFragments(List<BaseFragment> fragments) {

        this.fragments = fragments;

    }

 

    /**

     * (滑动时)返回碎片对象

     *

     * @param i

     * @return

     */

    @Override

public Fragment getItem(int i){

returnfragments.get(i);

    }

 

    @Override

public int getCount() {

return fragments.size();

    }

}

 

创建碎片

public class ListFragmentextends BaseFragment {

 

    List<MediaUtil.MediaInfo> list;---------------à可以在BaseFragment声明,这里就不用声明了

    MyAdapter adapter;

    ListView listView;

 

    //fragment布局对象

    View view;

 

    @Override

public ViewonCreateView(LayoutInflater inflater, ViewGroup container,

                             BundlesavedInstanceState) {

        //反射视图

view =inflater.inflate(R.layout.fragment_list, container, false);

        //获取参数值

        Bundle bundle = getArguments();----------------à获得参数

        //判断条件

        String condition =bundle.getString("key");

 

initView();

initData(condition);

 

return view;

    }

 

private void initView() {

listView = (ListView) view.findViewById(R.id.lv);

adapter = newMyAdapter(getActivity());

    }

 

 

private void initData(Stringcondition) {

        //图片

if(condition.equals("image")) {

list =MediaUtil.getImageList(getActivity());

        }

        //音频

if (condition.equals("audio")){

list =MediaUtil.getAudioList(getActivity());

        }

        //视频

if(condition.equals("video")) {

list =MediaUtil.getVideoList(getActivity());

        }

adapter.setList(list);

listView.setAdapter(adapter);

adapter.notifyDataSetChanged();

    }

}

 

碎片基类

public class BaseFragmentextends Fragment {

 

publicList<MediaUtil.MediaInfo> list;

 

public voidsetList(List<MediaUtil.MediaInfo> list) {

        this.list = list;

    }

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章