ViewPager和ViewPager+Fragment簡單使用
阿新 • • 發佈:2019-02-18
ViewPager是support v4包中的頁面切換檢視,使用時需要匯入support.v4的包
xml:宣告
//layout中宣告
<android.support.v4.view.ViewPager
android:id="@+id/m_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
//java:配置和多個view的關係需要使用PagerAdapter
初始化:
ViewPager mPager = (ViewPager) findViewById(R.id.m_pager);
//定義需要的頁面
List<View> list = new ArrayList<View>();
...
list.add(v1);
list.add(v2);
定義需要的Adapter介面卡
class MyPagerAdapter extends PagerAdapter {
private List<View> list;
MyPagerAdapter(List<View> list) {
this.list = list;
}
// 配置多少個頁面
@Override
public int getCount() {
return null == list ? 0 : list.size();
}
@Override
public boolean isViewFromObject(View v, Object obj) {
return v == obj;
}
// 檢視移除緩衝區時觸發
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//獲取要移除的檢視物件
View v = list.get(position);
container.removeView(v);
}
// 檢視進入緩衝區時觸發
@Override
public Object instantiateItem(ViewGroup container, int position) {
View v = list.get(position);
// 將進入緩衝區的檢視物件,新增到容器
container.addView(v);
return v;
}
}
設定介面卡
MyPagerAdapter adapter = new MyPagerAdapter(list);
//設定介面卡
mPager.setAdapter(adapter);
ViewPager頁面滑動監聽,需要使用OnPageChangeListener物件來監聽
// ViewPager的監聽
private ViewPager.OnPageChangeListener pageChange =
new ViewPager.OnPageChangeListener() {
// 頁面選中
@Override
public void onPageSelected(int position) {
Log.e("m_tag", "onPageSelected:" + position);
}
// 介面滑動中(position表示滑動中第一個介面的下標,offset表示第一個介面在螢幕外的比例0-1,
第三個引數表示在螢幕外的畫素值)
@Override
public void onPageScrolled(int position, float offset,
int offsetInPixels) {
Log.e("m_tag", "onPageScrolled:" + position + " " + offset + " "
+ offsetInPixels);
}
// 滑動的狀態
@Override
public void onPageScrollStateChanged(int state) {
Log.e("m_tag", "onPageScrollStateChanged:" + state);
}
};
設定監聽
mPager.setOnPageChangeListener(pageChange);
設定選中的位置
mPager.setCurrentItem(index);
ViewPager+Fragment
ViewPager+Fragment 主要區別在於adapter之間的不同
FragmentPagerAdapter或者FragmentStatePagerAdapter,可以幫助ViewPager管理多個Fragment的切換。
public class MyPagerAdapter extends FragmentPagerAdapter {
private Fragment[] fragments;
public MyPagerAdapter(FragmentManager fm, Fragment[] fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return fragments[position];
}
@Override
public int getCount() {
return null == fragments ? 0 : fragments.length;
}
}