1.加载显示的页卡
将Layout布局转换成View对象
(1) LayoutInflater inflater=LayoutInflater.from(this);
inflater.inflate(resource,root);
(2) View.inflate(context,resource,root);
2.配置Adapter
(1) PagerAdapter 数据源 List<View>
(2) FragmentPagerAdapter 数据源:List<Fragment>
(3) FragmentStatePagerAdapter 数据源:List<Fragment>
ViewPager
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</android.support.v4.view.ViewPager>
PagerTabStrip
<android.support.v4.view.PagerTabStrip
android:id="@+id/titlelist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</android.support.v4.view.PagerTabStrip>
PagerTitleStrip
<android.support.v4.view.PagerTitleStrip
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</android.support.v4.view.PagerTitleStrip>
PagerTabStrip与PagerTitleStrip的异同:
PagerTabStrip有下划线和当前选中选项的下划线,PagerTitleStrip没有下划线
注意:PagerTabStrip和PagerTitleStrip不能同时使用,同时使用时上面使用的对象功能会失效
PagerTabStrip和PagerTitleStrip是ViewPager的子标签,使用时嵌套在ViewPager里面,在Adapter中重写getPageTitle方法实例化标题
package com.example.pageradapter;
import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
public class MyAdapter extends PagerAdapter {
private List<View> viewlist;
private List<String> titles;
public MyAdapter(List<View> viewlist,List<String> titles){
this.viewlist=viewlist;
this.titles=titles;
}
/**
* 返回页卡数量
*/
@Override
public int getCount() {
return viewlist.size();
}
/**
* View是否来自于对象
*/
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
/**
*销毁一个页卡
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(viewlist.get(position));
}
/**
* 实例化一个页卡
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(viewlist.get(position));
return viewlist.get(position);
}
/**
* 获取ViewPager页卡标题
*/
@Override
public CharSequence getPageTitle(int position) {
return titles.get(position);
}
}
package com.example.pageradapter;
import java.util.List;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragment;
private List<String>title;
public MyFragmentPagerAdapter(FragmentManager fm,List<Fragment> fragment,List<String>title) {
super(fm);
this.fragment=fragment;
this.title=title;
}
@Override
public Fragment getItem(int arg0) {
return fragment.get(arg0);
}
@Override
public int getCount() {
return fragment.size();
}
@Override
public CharSequence getPageTitle(int position) {
return title.get(position);
}
}
package com.example.pageradapter;
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 MyFragmentStatePagerAdapter extends FragmentStatePagerAdapter {
private List<Fragment> fragment;
private List<String>title;
public MyFragmentStatePagerAdapter(FragmentManager fm,List<Fragment> fragment,List<String>title) {
super(fm);
this.fragment=fragment;
this.title=title;
}
@Override
public Fragment getItem(int arg0) {
return fragment.get(arg0);
}
@Override
public int getCount() {
return fragment.size();
}
@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);
}
@Override
public CharSequence getPageTitle(int position) {
return title.get(position);
}
}
PagerAdapter、FragmentPagerAdapter、FragmentStatePagerAdapter 三者异同
PagerAdapter和FragmentStatePagerAdapter都可以创建和销毁加载的View对象,FragmentPagerAdapter直接加载全部的对象,不会销毁对象
FragmentPagerAdapter主要用于少量界面的ViewPager,会将所有的fragment保存在内存中,不会销毁。而FragmentStatePagerAdapter和ListView有点类似,会保存当前界面,以及下一个界面和上一个界面,最多保存3个,其他会被销毁掉。
代码路径:http://pan.baidu.com/s/1wml5c