效果如图:

使用Fragment实现tab的缺点就是不能够滑动。不过应该也算优点,具体场景可以自由选择。

完整代码:imooc-tab022fragment,在我的百度云网盘上。

MainAcgtivity.java

  1 package com.example.imooc_tab02;
  2
  3 import android.os.Bundle;
  4 import android.support.v4.app.FragmentActivity;
  5 import android.support.v4.app.FragmentManager;
  6 import android.support.v4.app.FragmentTransaction;
  7 import android.view.View;
  8 import android.view.View.OnClickListener;
  9 import android.widget.ImageButton;
 10 import android.widget.LinearLayout;
 11
 12 public class MainActivity extends FragmentActivity implements OnClickListener {
 13     // tabs
 14     LinearLayout tab_weixin, tab_frd, tab_addr, tab_settings;
 15     // ImageButton
 16     ImageButton btn_weixin, btn_py, btn_txl, btn_sz;
 17
 18     tab01 t1;
 19     tab02 t2;
 20     tab03 t3;
 21     tab04 t4;
 22
 23     @Override
 24     protected void onCreate(Bundle savedInstanceState) {
 25         super.onCreate(savedInstanceState);
 26         setContentView(R.layout.main);
 27         t1 = new tab01();
 28         t2 = new tab02();
 29         t3 = new tab03();
 30         t4 = new tab04();
 31         initView();
 32         initEvents();
 33
 34         /*
 35          * 把tab添加到FrameLayout中,transaction的前一个参数是FrameLayout
 36          * 的id,第二个参数是Fragment的继承类的实例对象
 37          */
 38         // transaction.add(R.id.id_fragment, t1);
 39
 40     }
 41
 42     private void initEvents() {
 43         tab_weixin.setOnClickListener(this);
 44         tab_frd.setOnClickListener(this);
 45         tab_addr.setOnClickListener(this);
 46         tab_settings.setOnClickListener(this);
 47         tab_addr.callOnClick();//设置通讯录为默认点击,
 48     }
 49
 50     private void initView() {
 51         // TODO Auto-generated method stub
 52         tab_weixin = (LinearLayout) findViewById(R.id.id_tab_weixin2);
 53         // tab_frd,tab_addr,tab_settings
 54         tab_frd = (LinearLayout) findViewById(R.id.id_tab_frd2);
 55         tab_addr = (LinearLayout) findViewById(R.id.id_tab_address2);
 56         tab_settings = (LinearLayout) findViewById(R.id.id_tab_settings2);
 57
 58         // btn_weixin,btn_py,btn_txl,btn_sz;
 59         btn_weixin = (ImageButton) findViewById(R.id.id_imgbtn_wx);
 60         btn_py = (ImageButton) findViewById(R.id.id_imgbtn_py);
 61         btn_txl = (ImageButton) findViewById(R.id.id_imgbtn_txl);
 62         btn_sz = (ImageButton) findViewById(R.id.id_imgbtn_sz);
 63     }
 64
 65     @Override
 66     public void onClick(View v) {
 67         // TODO Auto-generated method stub
 68         FragmentManager manager = getSupportFragmentManager();
 69         FragmentTransaction transaction = manager.beginTransaction();
 70         hideFragment(transaction);
 71         switch (v.getId()) {
 72         case R.id.id_tab_weixin2:
 73             resetImg();
 74             if(!t1.isAdded()){
 75                 //如果fragment对象t1没有被添加,那么就添加并显示
 76                 transaction.add(R.id.id_fragment, t1);
 77             }
 78             transaction.show(t1);
 79             btn_weixin.setImageResource(R.drawable.tab_weixin_pressed);
 80             break;
 81         case R.id.id_tab_frd2:
 82             resetImg();
 83             if (!t2.isAdded()) {
 84                 transaction.add(R.id.id_fragment, t2);
 85             }
 86             transaction.show(t2);
 87             btn_py.setImageResource(R.drawable.tab_find_frd_pressed);
 88             break;
 89         case R.id.id_tab_address2:
 90             resetImg();
 91             if (!t3.isAdded()) {
 92                 transaction.add(R.id.id_fragment, t3);
 93             }
 94             transaction.show(t3);
 95             btn_txl.setImageResource(R.drawable.tab_address_pressed);
 96             break;
 97         case R.id.id_tab_settings2:
 98             resetImg();
 99             if (!t4.isAdded()) {
100                 transaction.add(R.id.id_fragment, t4);
101             }
102             transaction.show(t4);
103             btn_sz.setImageResource(R.drawable.tab_settings_pressed);
104             break;
105
106         default:
107             break;
108         }
109         transaction.commit();
110     }
111
112     private void hideFragment(FragmentTransaction transaction) {
113         System.out.println("====开始hideFragment()...====");
114         // TODO Auto-generated method stub
115         if (t1 != null) {
116             System.out.println("hide(t1)...");
117             transaction.hide(t1);
118         }
119         if (t2 != null) {
120             System.out.println("hide(t2)...");
121             transaction.hide(t2);
122         }
123         if (t3 != null) {
124             System.out.println("hide(t3)...");
125             transaction.hide(t3);
126         }
127         if (t4 != null) {
128             System.out.println("hide(t4)...");
129             transaction.hide(t4);
130         }
131     }
132
133     // 重置按钮为灰色的
134     public void resetImg() {
135         btn_weixin.setImageResource(R.drawable.tab_weixin_normal);
136         btn_py.setImageResource(R.drawable.tab_find_frd_normal);
137         btn_txl.setImageResource(R.drawable.tab_address_normal);
138         btn_sz.setImageResource(R.drawable.tab_settings_normal);
139     }
140 }

转载于:https://www.cnblogs.com/Sunnor/p/4899434.html

ViewPager,使用Fragment实现相关推荐

  1. android viewpager 嵌套fragment,Android ViewPager+Fragment多层嵌套(使用问题处理)

    之前写了Android ViewPager+Fragment(使用问题处理),封装了一个BaseFragment,对于简单使用ViewPager+Fragment而言,是没有问题的. 不过,ViewP ...

  2. Android开发之ViewPager结合Fragment实现滑动页面的效果(源代码分享)

    前段日子的博客有介绍过关于ViewPager的使用,发现大家对那篇博客都情有独钟,今天我们就在来看一下ViewPager在Fragment中的使用吧,因为ViewPager是在补丁包中添加的低版本的包 ...

  3. ViewPager中Fragment的生命周期和FragmentPageAdapter与FragmentStatePageAdapter对其的影响

    首先,我们创建一个Activity和一个Fragment,并在Fragment的各个生命周期打好日志,并把Fragments丢进Viewpager,这里我们往Viewpager里丢了3个Fragmen ...

  4. Android ViewPager和Fragment实现顶部导航界面滑动效果

    在项目中,我们常常需要实现界面滑动切换的效果.例如,微信界面的左右滑动切换效果.那这种效果是怎么实现的?今天我就带大家简单了解ViewPager,并通过实例来实现该效果. 一. ViewPager 官 ...

  5. 关于Android ViewPager 与 Fragment 一起使用碰到的问题

    2019独角兽企业重金招聘Python工程师标准>>> 这是我前段时间遇到的两个问题,情况是这样的:第一个问题:由于公司的 app 层级比较多,所以用了一个翻页的功能.在具体翻到某一 ...

  6. android viewpager fragment 生命周期,ViewPager中Fragment的生命周期

    网上有很多Fragment生命周期的帖子,但是看了一下,没有找到自己想了解的东西,于是决定自己动手体验一下这个生命周期.主要想了解以下几个问题: Activity中的Fragment的生命周期 Vie ...

  7. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

    今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可以 ...

  8. android滑动fragment,android中ViewPager结合Fragment进行无限滑动

    实现ViewPager结合Fragment实现无限循环切换,这里也是在适配器里面进行的,当然使用滑动监听也能够实现 import android.support.v4.app.Fragment; im ...

  9. ViewPager、Fragment和TabLayout实现切页效果

    文章目录 ViewPager.Fragment和TabLayout实现切页效果 ViewPager.Fragment和TabLayout实现切页效果 不会上传动图,心里哭唧唧.但是是完整代码!新建一个 ...

  10. ViewPager切换Fragment生命周期变化

    很久没有写博客了,今天学习了MD的TabLayout ,使用到了ViewPager,于是对于很久以来的一个疑问:ViewPager切换Fragment生命周期是如何变化的进行了一个测试. 本文研究了: ...

最新文章

  1. 如何选择视觉CV光源颜色
  2. MaskGAN:谷歌大脑让AI学做完形填空的新尝试
  3. MICROSOFT SQLSERVER 总结
  4. 两段用来启动/重启Linux下Tomcat的Perl脚本
  5. Python计算本周是第几周
  6. java中this.value_java中关键字this的用法
  7. SpringMVC中JSP取不到ModelAndView的数据原因
  8. html全屏播放一段视频,显示HTML5视频全屏(Show HTML5 Video Fullscreen)
  9. 实现机器学习的循序渐进指南VIII——线性回归
  10. logstash filter 处理json数据按原始数据字段数据存储
  11. PostgreSQL参数学习:random_page_cost
  12. 常用路由器的帐号和密码大全
  13. HMC5883L 转换方向角与简易校准方法
  14. 2021-2027全球与中国硅胶注塑机市场现状及未来发展趋势
  15. 淘宝用户api 如何获得App Key和API Secret
  16. 渗透测试人员常用的8种火狐插件
  17. 【蓝桥杯】有理数的循环节
  18. 全国计算机一级第七套试题及答案,计算机一级考试第七套试卷及答案.doc
  19. 水利专业学计算机吗,大学哪些专业最易被误解?计算机专业居榜首,水利学生气到不行!...
  20. idea创建maven工程没有src文件夹,或者是maven文件结构不能完整创建,可能是因为你的网速问题

热门文章

  1. 瑞友客户端无法建立跟远程计算机的连接,瑞友天翼终端错误信息的原因以及解决方法大全.doc...
  2. 为什么需要建设者模式
  3. Windows核心编程_inlineHook
  4. .com才是顶级域名,baidu.com是二级域名
  5. 楔和的基本群|Seifert-Van Kampen定理的简单应用
  6. JVM飙高排查脚本-结构分析
  7. 为什么 Oracle 应该主推 NetBeans
  8. 【JVM】上帝视角看JVM内存模型,分而治之论各模块详情
  9. java:通过Calendar类正确计算两日期之间的间隔
  10. python argparse(参数解析)模块学习(二)