效果如图:

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

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

MainAcgtivity.java

 package com.example.imooc_tab02;

 import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.LinearLayout; public class MainActivity extends FragmentActivity implements OnClickListener {
// tabs
LinearLayout tab_weixin, tab_frd, tab_addr, tab_settings;
// ImageButton
ImageButton btn_weixin, btn_py, btn_txl, btn_sz; tab01 t1;
tab02 t2;
tab03 t3;
tab04 t4; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
t1 = new tab01();
t2 = new tab02();
t3 = new tab03();
t4 = new tab04();
initView();
initEvents(); /*
* 把tab添加到FrameLayout中,transaction的前一个参数是FrameLayout
* 的id,第二个参数是Fragment的继承类的实例对象
*/
// transaction.add(R.id.id_fragment, t1); } private void initEvents() {
tab_weixin.setOnClickListener(this);
tab_frd.setOnClickListener(this);
tab_addr.setOnClickListener(this);
tab_settings.setOnClickListener(this);
tab_addr.callOnClick();//设置通讯录为默认点击,
} private void initView() {
// TODO Auto-generated method stub
tab_weixin = (LinearLayout) findViewById(R.id.id_tab_weixin2);
// tab_frd,tab_addr,tab_settings
tab_frd = (LinearLayout) findViewById(R.id.id_tab_frd2);
tab_addr = (LinearLayout) findViewById(R.id.id_tab_address2);
tab_settings = (LinearLayout) findViewById(R.id.id_tab_settings2); // btn_weixin,btn_py,btn_txl,btn_sz;
btn_weixin = (ImageButton) findViewById(R.id.id_imgbtn_wx);
btn_py = (ImageButton) findViewById(R.id.id_imgbtn_py);
btn_txl = (ImageButton) findViewById(R.id.id_imgbtn_txl);
btn_sz = (ImageButton) findViewById(R.id.id_imgbtn_sz);
} @Override
public void onClick(View v) {
// TODO Auto-generated method stub
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
hideFragment(transaction);
switch (v.getId()) {
case R.id.id_tab_weixin2:
resetImg();
if(!t1.isAdded()){
//如果fragment对象t1没有被添加,那么就添加并显示
transaction.add(R.id.id_fragment, t1);
}
transaction.show(t1);
btn_weixin.setImageResource(R.drawable.tab_weixin_pressed);
break;
case R.id.id_tab_frd2:
resetImg();
if (!t2.isAdded()) {
transaction.add(R.id.id_fragment, t2);
}
transaction.show(t2);
btn_py.setImageResource(R.drawable.tab_find_frd_pressed);
break;
case R.id.id_tab_address2:
resetImg();
if (!t3.isAdded()) {
transaction.add(R.id.id_fragment, t3);
}
transaction.show(t3);
btn_txl.setImageResource(R.drawable.tab_address_pressed);
break;
case R.id.id_tab_settings2:
resetImg();
if (!t4.isAdded()) {
transaction.add(R.id.id_fragment, t4);
}
transaction.show(t4);
btn_sz.setImageResource(R.drawable.tab_settings_pressed);
break; default:
break;
}
transaction.commit();
} private void hideFragment(FragmentTransaction transaction) {
System.out.println("====开始hideFragment()...====");
// TODO Auto-generated method stub
if (t1 != null) {
System.out.println("hide(t1)...");
transaction.hide(t1);
}
if (t2 != null) {
System.out.println("hide(t2)...");
transaction.hide(t2);
}
if (t3 != null) {
System.out.println("hide(t3)...");
transaction.hide(t3);
}
if (t4 != null) {
System.out.println("hide(t4)...");
transaction.hide(t4);
}
} // 重置按钮为灰色的
public void resetImg() {
btn_weixin.setImageResource(R.drawable.tab_weixin_normal);
btn_py.setImageResource(R.drawable.tab_find_frd_normal);
btn_txl.setImageResource(R.drawable.tab_address_normal);
btn_sz.setImageResource(R.drawable.tab_settings_normal);
}
}

ViewPager,使用Fragment实现的更多相关文章

  1. 使用ViewPager切换Fragment时,防止频繁调用OnCreatView

    使用ViewPager切换Fragment,我原先使用系统自带的适配器FragmentPagerAdapter. 切换fragment时,频繁调用oncreatview(). 查看FragmentPa ...

  2. ViewPager之Fragment页面切换

    一.概述 ViewPager是android-support-v4中提供的类,它是一个容器类,常用于页面之间的切换. 继上篇文章<ViewPager之引导页>之后,本文主要介绍ViewPa ...

  3. ViewPager和Fragment的结合使用fragment里包含着listview的常见问题

    在我们开发的过程中可能会遇到类似需求,我们需要做一个左右滑动的tab导航,这个时候有些朋友可能会想到viewpager和fragment的结合来实现这个功能:当然实现的方法不单单着一种.我们这个随笔讨 ...

  4. viewpager和fragment预加载的解决

    在使用Viewpager和fragment处理中会出现预加载的问题,最近看别人的代码,终于找到了一个很好的处理方法 能有效的解决预加载的问题,在fragment都继承一个重写setUserVisibl ...

  5. 防止ViewPager和Fragment结合使用时候的数据预加载

    不知道你们使用ViewPager和Fragment结合的时候发现一个问题没,如果你的每个Fragment都需要请求网络数据,并且你在请求网络数据的时候会加入进度对话框的加载显示效果,当你显示第一个Fr ...

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

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

  7. ViewPager和Fragment的组合使用

    如图是效果图用的是Viewpager和fragment来实现的主界面 不过其中的预加载我没有解决 如下是代码代码比较简单 package com.ithello.dingding; import ja ...

  8. 【Android 界面效果27】利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果

    本文主要介绍如何利用ViewPager.Fragment.PagerTabStrip实现多页面滑动效果.即google play首页.新浪微博消息(at.评论.私信.广播)页面的效果.ViewPage ...

  9. ViewPager结合Fragment进行无限滑动

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

  10. Android 利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果

    本文主要介绍如何利用ViewPager.Fragment.PagerTabStrip实现多页面滑动效果.即google play首页.新浪微博消息(at.评论.私信.广播)页面的效果.ViewPage ...

随机推荐

  1. js中||和&&的用法

    在js中&&.||不一定都是用来判断一个表达式的逻辑值是true.false,更多的是用来依据真值或者假值执行相应操作! a() && b() :如果执行a()后返回t ...

  2. 利用python进行数据分析之绘图和可视化

    matplotlib API入门 使用matplotlib的办法最常用的方式是pylab的ipython,pylab模式还会向ipython引入一大堆模块和函数提供一种更接近与matlab的界面,ma ...

  3. kafka集群配置与测试

    刚接触一些Apache Kafka的内容,用了两天时间研究了一下,仅以此文做相关记录,以供学习交流.  概念: kafka依赖的项: 1. 硬件上,kafka利用线性存储来进行硬盘直接读写. 2. k ...

  4. 软件包管理_rpm命令管理_yum工具管理_文件归档压缩_源码包管理

    rpm命令管理软件 对于挂载的像U盘那种都会在midea目录下,但是会显示在桌面上 安装软件(i:install,v:verbose冗长的,h:human):rpm  -ivh  xxxx.rpm 安 ...

  5. php浮点数计算比较及取整不准确解决方法

    原文:php浮点数计算比较及取整不准确解决方法 php有意思的现象,应该是很多编程语言都会有这样的现象.这个是因为计算机的本身对浮点数识别的问题..... $f = 0.58; var_dump(in ...

  6. C#实现阻止关闭显示器和系统待机

    原文http://www.cnblogs.com/TianFang/archive/2012/10/12/2721883.html 最近写了一个下载程序,发现有一个问题:挂机下载的时候,下载任务会因为 ...

  7. spring与redis集成之aop整合方案

    java使用redis缓存可以使用jedis框架,jedis操作简单,没有什么复杂的东西需要学习,网上资料很多,随便看看就会了. 将spring与redis缓存集成,其实也是使用jedis框架,只不过 ...

  8. python开发_大小写转换,首字母大写,去除特殊字符

    这篇blog主要是总结我们在平常开发过程中对字符串的一些操作: #字母大小写转换 #首字母转大写 #去除字符串中特殊字符(如:'_','.',',',';'),然后再把去除后的字符串连接起来 #去除' ...

  9. 关于我们_ | 腕表时代watchtimes.com.cn

    关于我们_ | 腕表时代watchtimes.com.cn 关于我们         腕表时代是北京兰会时光科技有限公司旗下运营的手表网站.腕表时代于2013年5月17日正式上线.秉承专业.生动.实用 ...

  10. Floodlight之 FloodlightContextStore 数据结构

         FloodlightContextStore 代表的是一种缓存模型(利用的是ConcurrentHashMap).里面存储的是上下文相关的对象,可以依据对应的key得到详细的 Object. ...