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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章