欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

ViewPager使用方法詳解 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識(shí)

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!

您當(dāng)前位置>首頁(yè) » 新聞資訊 » 技術(shù)分享 >

ViewPager使用方法詳解

發(fā)表時(shí)間:2020-10-19

發(fā)布人:葵宇科技

瀏覽次數(shù):157


今天我們來(lái)看看ViewPager,這個(gè)控件異常實(shí)用。閑話不說(shuō),直接進(jìn)入主題:
要構(gòu)造ViewPager,先說(shuō)幾點(diǎn)要留意一點(diǎn),ViewPager 是存在于Android的 v4 兼容包里:
[img]
android.jar 就是我們的最重要的sdk, android.support.v4.jar 就是android為了高版本sdk兼容低版本體系而創(chuàng)建的兼容包。 ViewPager就是一個(gè)控件,和TextView一個(gè)級(jí)別,其初始辦法要應(yīng)用到Adapter,我們天然愫想到了ListView。那么它與ListView最大年夜的不合就是其初始化時(shí)可以應(yīng)用3中Adapter:
(1)PagerAdapter :用于初始化view,
(2)FragmentPagerAdapter:用于初始化 Fragment,
(3)FragmentStatePagerAdapter:和FragmentPagerAdapter類似,然則供給加倍周全的創(chuàng)建和燒毀功能。
接下來(lái)我們來(lái)一一介紹,先貼一張效不雅圖:
[img]
1. 要應(yīng)用ViewPager,起首須要在構(gòu)造中惹人控件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <android.support.v4.view.PagerTabStrip
            android:id="@+id/pagertabstrip"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

        </android.support.v4.view.PagerTabStrip>
    </android.support.v4.view.ViewPager>

</LinearLayout>
ViewPager就是我們的控件, PagerTabStrip是title。
2.  惹人控件之后, 和listview一樣, 我們就須要對(duì)其添加數(shù)據(jù). 方才已經(jīng)介紹過(guò), 添加數(shù)據(jù)一共有3中Adapter,先來(lái)介紹最簡(jiǎn)單的一種PagerAdapter。
我們須要持續(xù)PagerAdapter,然后重寫瑯綾擎的辦法:
package com.xiaoming.demo01_viewpager;

import java.util.List;

import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;

public class MyPagerAdapter extends PagerAdapter {
	private static final String TAG = "MyPagerAdapter";
	private List<View> mViewList;
	private List<String> mTitleList;
	
	public MyPagerAdapter(List<View> viewlist, List<String> titlelist) {
		this.mViewList = viewlist;
		this.mTitleList = titlelist;
	}

	@Override
	public int getCount() {
		return mViewList.size();
	}

	@Override
	public boolean isViewFromObject(View view, Object obj) {
		return view==obj;
	}
	
	@Override
	public Object instantiateItem(ViewGroup container, int position) {
		container.addView(mViewList.get(position));
		Log.d(TAG,"instantiateItem,"+"position:"+position);
		return mViewList.get(position);
	}
	
	@Override
	public void destroyItem(ViewGroup container, int position, Object object) {
		container.removeView(mViewList.get(position));
		Log.d(TAG,"destroyItem,"+"position:"+position);
	}
	
	@Override
	public CharSequence getPageTitle(int position) {
		return mTitleList.get(position);
	}
	

}
mViewList 是傳入要顯示的View列表,在MainActivity中的初始化為:
[img]
mTitleList 是傳入對(duì)應(yīng)每頁(yè)要顯示的title,在MainActivity中的初始化為:
[img]
這里須要重寫的幾個(gè)辦法也很簡(jiǎn)單:
(1)getCount() : 獲取總共頁(yè)數(shù)
(2)isViewFromObject(View view, Object obj):斷定view是否是指定的obj,直接參照官方api:return view==obj;
(3)instantiateItem(ViewGroup container, int position):用來(lái)初始化容器中的內(nèi)容:
         先是添加到容器中:container.addView(mViewList.get(position));
         然后返回顯示的view:return mViewList.get(position);
(4)destroyItem(ViewGroup container, int position, Object object):移除對(duì)象,并且燒毀不要的對(duì)象:
   container.removeView(mViewList.get(position));
(5)getPageTitle(int position): 獲得對(duì)應(yīng)頁(yè)的標(biāo)題: return mTitleList.get(position);
5個(gè)辦法都很簡(jiǎn)單,重寫完之后我們就可以來(lái)加載ViewPager了:
mViewPager = (ViewPager) findViewById(R.id.viewpager);

MyPagerAdapter myadapter = new MyPagerAdapter(viewlist, titlelist);

mViewPager.setAdapter(myadapter);

如許就完成了。如不雅想監(jiān)聽viewpager變更時(shí)的時(shí)光,可以給MainActivity實(shí)現(xiàn) OnPageChangeListener, 然后重寫這三個(gè)辦法,我們這里用最簡(jiǎn)單的toast來(lái)提示:
	@Override
	public void onPageScrollStateChanged(int arg0) {
	}

	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {
	}

	@Override
	public void onPageSelected(int arg0) {
		showToast("當(dāng)前是第" + arg0 + "頁(yè)");
	}

3. 介紹完了應(yīng)用PagerAdapter,我們來(lái)介紹應(yīng)用Fragment填充ViewPager內(nèi)容:
和應(yīng)用view一樣,起首須要初始化一個(gè)Fragment列表(至于fragment不在這里介紹):
[img]
然后寫一個(gè)adapter持續(xù)至 FragmentPagerAdapter:
package com.xiaoming.demo01_viewpager;

import java.util.List;

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

public class MyFragmentPageAdapter extends FragmentPagerAdapter {
	private List<Fragment> mListFragment;
	private List<String> mListTitle;
	

	public MyFragmentPageAdapter(FragmentManager fm,
			List<Fragment> listFragment, List<String> listTitle) {
		super(fm);
		this.mListFragment = listFragment;
		this.mListTitle = listTitle;
	}

	@Override
	public Fragment getItem(int position) {
		return mListFragment.get(position);
	}

	@Override
	public int getCount() {
		return mListFragment.size();
	}
	
	@Override
	public CharSequence getPageTitle(int position) {
		return mListTitle.get(position);
	}

}
實(shí)現(xiàn)的辦法重要少了兩個(gè):instantiateItem() 和 destroyItem() ,因?yàn)樵趹?yīng)用fragment和ViewPager澆憂⒛時(shí)刻,第一次加載ViewPager,就會(huì)把所有的fragment都加載進(jìn)入,并且知道ViewPager燒毀時(shí)才會(huì)燒毀fragment列表中的fragment。 然則在應(yīng)用 pageradapter的時(shí)刻,一次體系加載3個(gè)view中內(nèi)存中,會(huì)動(dòng)態(tài)的創(chuàng)建和刪除大年夜于3個(gè)的部分。相面代碼中也有l(wèi)og,大年夜家可以參考看一下。
在MainActivity中應(yīng)用:
        MyFragmentPageAdapter fadapter = new MyFragmentPageAdapter(getSupportFragmentManager(), fragmentlist, titlelist);

        mViewPager.setAdapter(fadapter);

這里須要留意,初始化 FragmentPageAdapter第一個(gè)參數(shù)是 FragmentManager,用來(lái)治理Fragmnet。獲得FragmentManager有兩種情況:
(1)如不雅應(yīng)用 import android.support.v4.app.Fragment;  就是v4包中的Fragment,須要應(yīng)用Activity 的 getSupportFragmentManager() 獲得FragmentManager。
(2)如不雅應(yīng)用 import android.app.Fragment; 就是正牌Fragmnet,兼容性沒(méi)有那么好,直接應(yīng)用Activity 的 getFragmentManager() 獲得FragmentManager。
4. 應(yīng)用 FragmentStatePagerAdapter 填充 :
package com.xiaoming.demo01_viewpager;

import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.ViewGroup;

public class MyFragmentStatePageAdapter extends FragmentStatePagerAdapter {
	private List<Fragment> mListFragment;
	private List<String> mListTitle;
	

	public MyFragmentStatePageAdapter(FragmentManager fm,
			List<Fragment> listFragment, List<String> listTitle) {
		super(fm);
		this.mListFragment = listFragment;
		this.mListTitle = listTitle;
	}

	@Override
	public Fragment getItem(int position) {
		return mListFragment.get(position);
	}

	@Override
	public int getCount() {
		return mListFragment.size();
	}
	
	@Override
	public CharSequence getPageTitle(int position) {
		return mListTitle.get(position);
	}
	
	@Override
	public void destroyItem(ViewGroup container, int position, Object object) {
		super.destroyItem(container, position, object);
	}
	
	@Override
	public Object instantiateItem(ViewGroup arg0, int arg1) {
		return super.instantiateItem(arg0, arg1);
	}

}
應(yīng)用辦法和應(yīng)用FragmentPagerAdapter完全一樣,就是多重寫了兩個(gè)辦法,并且都是應(yīng)用的父類的實(shí)現(xiàn):
	@Override
	public void destroyItem(ViewGroup container, int position, Object object) {
		super.destroyItem(container, position, object);
	}
	
	@Override
	public Object instantiateItem(ViewGroup arg0, int arg1) {
		return super.instantiateItem(arg0, arg1);
	}
所以FragmentStatePagerAdapter 比 FragmentPagerAdapter 多的功能就是可以動(dòng)態(tài)的治理顯示和燒毀fragment。
總結(jié)一下:
填充ViewPager的內(nèi)容一共有3中方法:
(1)應(yīng)用PagerAdapter,最簡(jiǎn)單,便利,和view結(jié)合??梢詣?dòng)態(tài)創(chuàng)建和燒毀ViewPager中頁(yè)的內(nèi)容。
(2)應(yīng)用FragmentPagerAdapter,應(yīng)用fragmnet作為Viewpager內(nèi)容,fragment的生命周期加倍可控,所以更推薦。然則不克不及動(dòng)態(tài)創(chuàng)建和燒毀ViewPager中頁(yè)的內(nèi)容。然則這也不見得不是功德哦!
(3)FragmentStatePagerAdapter 像是PagerAdapter和FragmentPagerAdapter的結(jié)合,及應(yīng)用fragment,又可以實(shí)現(xiàn)動(dòng)態(tài)加載內(nèi)容。
好了,停止??!
下面可貼上代碼:
http://download.csdn.net/detail/u013647382/8329741

相關(guān)案例查看更多