使用ViewPager和FragmentPagerAdapter实现Tab
前面我们分别利用ViewPager和Fragment实现了Tab效果。但是使用Fragment实现的Tab不能够左右滑动。如果我们既想使用Fragment又想让Tab能够滑动,那么怎么办呢?这 就是今天的方法,利用ViewPager和FragmentPagerAdapter来实现Tab。
没看过前两篇文章的读者可以点击下面的地址:
http://www.cnblogs.com/fuly550871915/p/4850056.html
废话不多说了,效果还是之前的效果。由于有些代码我们已经写过了。我们复用《使用Fragment实现Tab》这篇文章里的代码,保留所有的东西,只需要修改两个地方即可。
一、修改主布局
只需要把activity_main.xml的布局中间的改为ViewPager即可。代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
> <include layout="@layout/top"/> <android.support.v4.view.ViewPager
android:id="@+id/id_vp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"> </android.support.v4.view.ViewPager> <include layout="@layout/bottum"/>" </LinearLayout>
二、修改MainAcitivty
其实方法跟第一篇文章《使用ViewPager实现Tab》类似,只不过是将适配器改为了FragmentPagerAdapter而已,那么相应的数据集里面的泛型也就应该是Fragment实例了。总结,如果前两篇文章你认真看了并做了,下面的代码还是挺简单的。具体如下:
import java.util.ArrayList;
import java.util.List; import android.os.Bundle;
import android.app.Activity;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.LinearLayout; public class MainActivity extends FragmentActivity implements OnClickListener{ private ImageButton himg;
private ImageButton simg;
private ImageButton uimg;
private ImageButton yimg; private Fragment hfrag;
private Fragment sfrag;
private Fragment ufrag;
private Fragment yfrag; private LinearLayout hlay;
private LinearLayout slay;
private LinearLayout ulay;
private LinearLayout ylay; private ViewPager vp;
private FragmentPagerAdapter mAdapter;//适配器
private List<Fragment> mDatas = new ArrayList<Fragment>(); protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initView();//依旧是初始化 initEvent();//初始化事件
} private void initEvent() {
//设定点击事件 hlay.setOnClickListener(this);
slay.setOnClickListener(this);
ulay.setOnClickListener(this);
ylay.setOnClickListener(this); vp.setOnPageChangeListener(new OnPageChangeListener() { public void onPageSelected(int arg0) { resetImg();
int i = vp.getCurrentItem(); setTab(i); } public void onPageScrolled(int arg0, float arg1, int arg2) { } public void onPageScrollStateChanged(int arg0) { }
}); } private void initView() {
//获得按钮
himg = (ImageButton) findViewById(R.id.ibtn_hudie);
simg = (ImageButton) findViewById(R.id.ibtn_set);
uimg = (ImageButton) findViewById(R.id.ibtn_user);
yimg = (ImageButton) findViewById(R.id.ibtn_yang); //获得底部的线性布局
hlay = (LinearLayout) findViewById(R.id.lay_hudie);
slay = (LinearLayout) findViewById(R.id.lay_set);
ulay = (LinearLayout) findViewById(R.id.lay_user);
ylay = (LinearLayout) findViewById(R.id.lay_yang); //获取fragment
hfrag = new HFragment();
sfrag = new SFragment();
ufrag = new UFragment();
yfrag = new YFragment(); //加入数据集
mDatas.add(hfrag);
mDatas.add(sfrag);
mDatas.add(ufrag);
mDatas.add(yfrag); vp = (ViewPager) findViewById(R.id.id_vp); mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) { public int getCount() { return mDatas.size();
} public Fragment getItem(int position) { return mDatas.get(position);
}
}; vp.setAdapter(mAdapter); } public void onClick(View v) { resetImg();//将按钮复位 switch(v.getId()){ case R.id.lay_hudie:
setSelected(0);
break;
case R.id.lay_set:
setSelected(1);
break;
case R.id.lay_user:
setSelected(2);
break;
case R.id.lay_yang:
setSelected(3);
break;
}
} private void setSelected(int i) {
//需要将按钮变亮,且需要切换fragment的状体 setTab(i);
vp.setCurrentItem(i);//设定当前的item } //该方法用来设定按钮的高亮
private void setTab(int i){
switch(i){
case 0:
himg.setImageResource(R.drawable.hudie2);
break;
case 1:
simg.setImageResource(R.drawable.set2);
break;
case 2:
uimg.setImageResource(R.drawable.user2);
break;
case 3:
yimg.setImageResource(R.drawable.yang2);
break;
}
} private void resetImg() { himg.setImageResource(R.drawable.hudie);
simg.setImageResource(R.drawable.set);
uimg.setImageResource(R.drawable.user);
yimg.setImageResource(R.drawable.yang); }
}
好了,至此完成了所有的代码,快运行试试,是不是又可以左右滑动了。
三、总结
如果你的app中不要求具有左右滑动的功能,建议使用Fragment实现Tab。如果想有滑动效果的话,建议使用ViewPager和FragmenPagerAdapter来实现Tab。总之,使用Fragment可以大大提高我们的代码质量。
使用ViewPager和FragmentPagerAdapter实现Tab的更多相关文章
- 安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面)
学习内容来自“慕课网” ViewPager与FragmentPagerAdapter实现Tab 将这两种实现Tab的方法结合起来.效果就是可以拖动内容区域来改变相应的功能图标亮暗 思路: Fragme ...
- Android实战简易教程-第三十四枪(基于ViewPager和FragmentPagerAdapter实现滑动通用Tab)
上一段时间写过一篇文章<基于ViewPager实现微信页面切换效果> 里面实现了相似微信Tab的页面.可是这样的实现方法有个问题.就是以后全部的代码逻辑都必须在MainActivity中实 ...
- ViewPager With FragmentPagerAdapter
采用PagerAdapter中的FragmentPagerAdapter来实现页面切换,适用于a handful of typically more static fragments to be pa ...
- 使用FragmentTabHost+TabLayout+ViewPager实现双层嵌套Tab
大多数应用程序都会在底部使用3~5个Tab对应用程序的主要功能进行划分,对于一些信息量非常大的应用程序,还需要在每个Tab下继续划分子Tab对信息进行分类显示. 本文实现采用FragmentTabHo ...
- 安卓开发之使用viewpager+fragment实现滚动tab页
闲着.用viewpager+fragment实现了个滚动tab..轻拍,以后会陆续发先小东西出来..爱分享,才快乐.demo见附件.. package com.example.demo; import ...
- ViewPager(1)FragmentPagerAdapter
FragmentPagerAdapter 适合只有少量的pager,所有pager同时全部存在,不会有被销毁的,page过多很容易内存溢出. 1,代码 1.1 ViewPagerMain.java i ...
- Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24740977 Android如今实现Tab类型的界面方式越来越多,今天就把常见的 ...
- ViewPager、Fragment、Matrix综合使用实现Tab滑页效果
原文地址:http://www.cnblogs.com/kross/p/3372987.html 我们实现一个上面是一个可以左右滑动的页面,下面是三个可点击切换的tab按钮,tab按钮上还有一个激活条 ...
- [转][Android]FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别
原文链接:http://blog.csdn.net/zhaokaiqiang1992 FragmentPagerAdapter是android-support-v4支持包里面出现的一个新的适配器,继承 ...
随机推荐
- Mybatis 关联查询(三)
多对多的管理查询结果映射 1. 需求: 查询用户购买的商品信息 2. 分析: (1)用户和商品没有直接关联 (2)用户和订单进行了关联,订单和订单明细进行了关联,订单明细和商品进行了关联,因此 ...
- web渗透笔记
1.安装nmap记录:(1)下载:wget http://nmap.org/dist/nmap-6.46.tar.bz2(最新版)wget http://nmap.org/dist/nmap-6.00 ...
- office2007安装时显示安装程序找不到 office.zh-cn\officeLR.cab怎么办
根本原因是和VS2008有关解决方法如下:1. 找到vs2008安装程序(光盘,镜像文件,解压文件都一样),找到WCU文件夹在他里面找到WebDesignerCore文件夹,然后打开它找到WebDes ...
- http所有请求头在Console中打印
1.目标:将http中的请求头全部打印在Console中 2.基本语句 //1.获得指定的头 String header = response.getHeader("User-Agert&q ...
- SQL常用函数总结
SQL常用函数总结 这是我在项目开发中使用db2数据库写存储过程的时候经常用到的sql函数.希望对大家有所帮助: sql cast函数 (1).CAST()函数的参数是一个表达式,它包括用AS关键字分 ...
- c#之静态构造函数和单例模式
1.静态构造函数:在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类 public class A { ; : private static A instance_; publi ...
- java 输出菱形
package com.demo01; public class Triangle { /** * @param args */ /* * 第一步:规定输出的行数 * 第二步:输出空格 再输出一个星, ...
- static修饰java内部运行顺序
package com.demo01; public class Static extends demo{ /** * @param args */ private static String str ...
- 获取页面z-index最大值
getMaxZIndex = function () { var maxZ = Math.max.apply(null, $.map($('body *'), function(e,n) { if ( ...
- ef使用dbfirst方式连接mysql
1.安装 mysql connector net 6.9.9 https://dev.mysql.com/downloads/file/?id=463758 和mysql for visual st ...