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;

    }

}


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