Android--多页面管理控件之ViewPager

本文深入解析了如何在Android应用中使用ViewPager控件,包括布局加入、加载页卡、添加标签、使用FragmentPagerAdapter及监听切换页卡等功能,并提供了实例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ViewPager相当于容器,盛装View或者Fragment,可以使视图左右滑动。

一、在layout XML文件中如何加入ViewPager

<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:....>
</android.support.v4.view.ViewPager>

二、在ViewPager中加载要显示的页卡

1.将layout布局转为View对象(两种方法)

(1)LayoutInflater If=getLayoutInflater().from(this);

If.inflate(resource,root);

(2)View.inflate(context,resource,root);

2.相关的适配器Adapter(两类——View、Fragment(业务逻辑复杂时推荐使用Fragment))  新建类继承于下列某个Adapter,如MyPagerAdapter,然后重写相关的方法

(1)PagerAdapter  数据源:List<View>   //三个三个页面的加载

(2)FragmentPagerAdapter 数据源:List<Fragment> //所有页面一次都加载进来

(3)FragmentStatePagerAdapter 数据源:List<Fragment> //三个三个页面的加载,需重写instantiateItem、destroyItem方法,但函数内容不需改写

Adapter里面的常用方法:

(1)getCount()需要返回所有页卡的数量

(2)isViewFromObject(View arg0,Object arg1)  判断视图是否由对象产生 官方做法是 return arg0==arg1;

(3)instantiateItem(ViewGroup container,int position) 实例化一个页卡

(4)destroyItem(ViewGroup container,int position,Object object) 销毁一个页卡

(5)getPageTitle(int position) 返回页面标题信息

示例:

public class MyPageAdapter extends PagerAdapter{

	private List<View>viewList;
	public MyPageAdapter(List<View>viewList) {
		this.viewList=viewList;
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return viewList.size();
	}

	@Override
	public boolean isViewFromObject(View arg0, Object arg1) {
		// TODO Auto-generated method stub
		return arg0==arg1;
	}
	//实例化一个页卡,用来显示
	@Override
	public Object instantiateItem(ViewGroup container, int position) {
		container.addView(viewList.get(position));
		return viewList.get(position);
	}
	
	@Override
	public void destroyItem(ViewGroup container, int position, Object object) {
		container.removeView(viewList.get(position));
	}
}

三、像微信一样给每个页卡添加一个标签 与ViewPager控件在同一个布局文件中

1.在ViewPager内添加一个PagerTabStrip(下面有线)或者PagerTitleStrip(下面没有线),并存时,前者会失效

 <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        >
        
        <android.support.v4.view.PagerTabStrip
        android:id="@+id/tab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        >
   <span style="white-space:pre">		</span></android.support.v4.view.PagerTabStrip> //注意:在ViewPager标签内
        
    </android.support.v4.view.ViewPager>

2.声明一个PagerTabStrip 对象如tab

3.声明一个List<String> 变量  如 new ArrayList<String>, 向其添加页卡的标题内容

4.在MyPagerAdapter的构造函数中添加一个参数List<String> titleList 来传入标题

5.可以通过tab变量修改PagerTabStrip的属性

  (1)tab.setBackgroundColor(Color.YELLOW);

  (2)tab.setTextColor(Color.RED);

  (3)tab.setDrawFullUnderline(false); //将下面的长线取消掉,即不显示

  (4)tab.setTabIndicatorColor(Color.BLUE);  //设置下面的小粗线

实例

viewList=new ArrayList<View>();
titleList=new ArrayList<String>();
View view1 = View.inflate(this, R.layout.view1, null);
View view2 = View.inflate(this, R.layout.view2, null);
View view3 = View.inflate(this, R.layout.view3, null);
View view4 = View.inflate(this, R.layout.view4, null);
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);
viewList.add(view4);
		
titleList.add("第一个页面");
titleList.add("第二个页面");
titleList.add("第三个页面");
titleList.add("第四个页面");
		
pager=(ViewPager) findViewById(R.id.pager);
tab=(PagerTabStrip) findViewById(R.id.tab);
MyPageAdapter adapter=new MyPageAdapter(viewList,titleList);
pager.setAdapter(adapter);


四、FragmentPagerAdapter的使用

1.新建3个Fragment派生类,重写onCreateView()方法。

2.初始化List<Fragment>  fragLis=new ArrayList<Fragment>();

3.将1中的三个派生类对象添加进fragList中,如 fragListl.add(new Fragment1());

4.配置Fragment的数据适配器,新建一个FragmentPagerAdapter派生类(成员数据List<Fragment>fragList; List<String> titleList),重写父类的方法

(1)构造函数,参数中增加fragList和titleList;

(2)Fragment getItem(int arg0);

(3)public int getCount() 

(4)public CharSequence getPageTitle(int position) {return titleList.get(position);}

5.为了支持support.v4下的FragmentPagerAdapter,MainActivity需继承于FragmentActivity,

MyFragmentPagerAdapter adapter=new MyFragmentPagerAdapter(getSupportFragmentManager,fragList, titleList);

6.pager.setAdapter(adapter);

五、监听器的使用

接口:OnPageChangeListener 监听切换页卡是切换到多少页,从0开始计数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值