Android两种为ViewPager+Fragment添加Tab的方式

在Android开发中ViewPager的使用是非常广泛的,而它不仅仅能够实现简单的开始引导页,还可以结合Fragment并添加Tab作为选项卡或为显示大批量页面实现强大的顺畅滑动

下面介绍两种为ViewPager+Fragment添加Tab的方式:

第一种:

在MainActivity布局中定义一个ViewPager

在MainActivity中声明ViewPager并实现它的Adapter继承自FragmentPagerAdapter

首先需要通过重写有参的构造方法来获取FragmentManager对象,并重写一系列方法:

1.在getItem中通过switch判定当前的ViewPager在第几个页面,返回对应的Fragment

2.getCount最简单,直接返回想要创建的ViewPager的页数

3.重写getPageTitle方法,通过其返回值来在标签上显示一些数据,(需要在创建标签时通过adapter调用该方法自己设置显示的数据)

4.在MainActivity中获取ActionBar对象,通过action.newTab创建标签,通过action的addTab方法为ViewPager添加标签(通过for循环中的adapter的getCount方法作为条件来添加对应数量的标签)

5.最后通过分别实现ViewPager和Tab的监听事件来实现ViewPager和Tab的一一对应

mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {
        actionBar.setSelectedNavigationItem(position);
    }
});
actionBar.newTab().setTabListener(new ActionBar.TabListener() {
    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        mViewPager.setCurrentItem(tab.getPosition());
    }
    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
    }
    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
    }
});

第二种:

在CollectionDemoActivity的布局里存放一个ViewPager,并在顶部显示标签(需要写在ViewPager布局中)

在CollectionDemoActivity中声明ViewPager并实现它的Adapter继承自FragmentStatePagerAdapter

首先需要通过重写有参的构造方法来获取FragmentManager对象,并重写一系列方法:

1.在getItem中绑定一个Fragment,并可以通过Bundle对其进行传值,最终返回fragment对象

2.同上

3.如果在布局中定义了ViewPager的顶部标签,需要在此重写getPageTitle方法,通过其返回值来在标签上显示一些数据

4.在getItem中所绑定的Fragment布局中,定义想要显示的布局即可,并在Fragment中通过getArguments获取到Bundle传递的值

注意:FragmentPagerAdapter和FragmentStatePagerAdapter的区别

1.通过继承FragmentPagerAdapter创建的Fragment对象会永久存储在内存中,因此通常用于显示少量pager页面,像选项卡

2.通过继承FragmentStatePagerAdapter只会保留至多三个pager页面(即当前页面,前一个和后一个,如果当前页面为首个,则只会存在两个),因此通常用于显示比较多的pager页面,像关联着ListView的pager页面

时间: 2024-12-22 05:18:44

Android两种为ViewPager+Fragment添加Tab的方式的相关文章

Android 两种启动Service(远程)的方式:Bind 与Start

前言:本文主要讨论启动远程Service. Service和Activity不在一个工程里面,也即不在一个App里面.不在一个进程里,所以会用到AIDL. Service的android:process属性未指定. 一.startService 1.通过调用startService启动服务的过程: onCreate ->onStartCommand ->onStart startService 仅用于启动服务,如果Activity需要与Service进行通信,需利用Broadcast. 2.而

Android实习札记(8)---ViewPager+Fragment实例详解

Android实习札记(8)---ViewPager+Fragment实例讲解 --转载请注明出处:coder-pig 在札记(5)中我们就说过要弄一个模仿微信页面切换的东东,就是ViewPager+Fragment 实现的一个东西,札记(6)中也学习了一下ViewPager的一些基本用法,本节就来将两者 结合以实现我们想要的效果! 1.ViewPager关于Fragment的说法? 先看下Google官网怎么说: 大概意思就是: ViewPager更多的时候是与Fragment协同使用,这样可

Android两种旋转Bitmap方法比较

方法1. 利用Bitmap.createBitmap Bitmap adjustPhotoRotation(Bitmap bm, final int orientationDegree) { Matrix m = new Matrix(); m.setRotate(orientationDegree, ( float ) bm.getWidth() / 2, ( float ) bm.getHeight() / 2); try { Bitmap bm1 = Bitmap.createBitmap

(转载)Android两种Tab分页的方式:TabActivity和ActivityGroup以及Android项目几种常见的应用架构

在Android里面Tab分页,常用的方法有两种: 一.TabActivity和TabHost的结合 1.主类继承TabActivity public class Tagpage extends TabActivity 2.获取当前TabHost对象 final TabHost tabHost = getTabHost(); 3.添加Tab分页标签,这里就是关键,把每个分页面链接成Activity.页面的跳转,即是Activity的跳转. tabHost.addTab(tabHost.newTa

Tab 滑动标签,综合ViewPager+Fragment+自定义Tab+ActionBar内容

1.效果图 第二个菜单TAB1,TAB2,TAB3是参照网上的例子,第一个菜单是在它的基础之上改变而来. 2.菜单 这里的菜单是通过两种方式来实现,一种是通过布局文件,一种是通过自定义组件LinearLayout.自定义只需要传入菜单的名字即可,切换时需要监听事件.下面是一个viewpager+fragment实现,在滑动时改变tab的选中项. 自定义tab底部线是采用TranslateAnimation动画来实现滚动,布局文件采用viewpager的方法onPageScrolled和onPag

ViewPager+Fragment实现Tab主界面

毕竟是第一次做项目,所以在每一点上都做得特别认真,接下来我来给大家大致讲述一下用ViewPager+Fragment来实现app Tab主界面,突然想起来LZ居然2天没去上课了......(>....<) 没办法,为了暑假的实习offer,只好拼了!!! package com.bob.tabui; import android.support.v4.app.*; import android.os.Bundle; import android.support.v4.view.ViewPage

Android 两种注册、发送广播的区别

前言:前面文章记录了Service的使用,这次来记录另一个四个组件之一的BroadcastReceiver.主要介绍两种发送和注册广播的区别. BroadcastReceiver广播接收者用于接收系统或其他程序(包括自己程序)发送的广播. 一.注册广播 在android中,我们如果想接收到广播信息,必须自定义我们的广播接收者.要写一个类来继承BroadcastReceiver,并且重写其onReceive()方法,实现接收到特定广播所要做的事情. 这是一个自定义的广播接收者: public cl

Android 两种方式实现类似水波扩散效果

原文链接 https://mp.weixin.qq.com/s/M19tp_ShOO6esKdozi7Nlg 两种方式实现类似水波扩散效果,先上图为敬 自定义view实现 动画实现 自定义view实现 思路分析:通过canvas画圆,每次改变圆半径和透明度,当半径达到一定程度,再次从中心开始绘圆,达到不同层级的效果,通过不断绘制达到view扩散效果 private Paint centerPaint; //中心圆paint private int radius = 100; //中心圆半径 pr

android 两种定时器的实现

在Android上常用的定时器有两种,一种是Java.util.Timer,一种就是系统的AlarmService了. 实验1:使用Java.util.Timer. 在onStart()创创建Timer,每5秒更新一次计数器,并启动. Java代码 ? 1 2 3 4 5 6 7 8 mTimer = new Timer();        mTimer.schedule(new TimerTask() {                        @Override