// BaseActivity 是实现的一些公共的变量和方法,可以暂时为空的类

public class HomeActivity extends BaseActivity implements View.OnClickListener {
   
// 下面的四个按钮
private TextView mHomeView;
private TextView mPondView;
private TextView mMessageView;
private TextView mMineView;

// 相对布局的 layout 里面装着2个textView 分别放着 图标和文字
private RelativeLayout mHomeLayout;
private RelativeLayout mPondLayout;
private RelativeLayout mMessageLayout;
private RelativeLayout mMineLayout;
// 声明fragmentManager 和四个fragment 以及当前的fragment
private FragmentManager fm;
private HomeFragment mHomeFragment;
private Fragment mCommonFragmentOne;
private MessageFragment mMessageFragment;
private MineFragment mMineFragment;
private Fragment mCurrent; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_layout);
   // 初始化控件变量
initView();
// 创建首页的Fragment
mHomeFragment = new HomeFragment();
// 得到fragment 管理器,Activity 基类里面定义的
fm = getFragmentManager();

FragmentTransaction fragmentTransaction = fm.beginTransaction();
// 使用homeFragment 替换 content_layout 布局
fragmentTransaction.replace(R.id.content_layout, mHomeFragment);
fragmentTransaction.commit();
} private void initView() {
// 先初始化layout 并赋值其点击的方法
mHomeLayout = (RelativeLayout) findViewById(R.id.home_layout_view);
mHomeLayout.setOnClickListener(this);
mPondLayout = (RelativeLayout) findViewById(R.id.pond_layout_view);
mPondLayout.setOnClickListener(this);
mMessageLayout = (RelativeLayout) findViewById(R.id.message_layout_view);
mMessageLayout.setOnClickListener(this);
mMineLayout = (RelativeLayout) findViewById(R.id.mine_layout_view);
mMineLayout.setOnClickListener(this);
// 再初始化里面的textView 因为点击的时候要给textView的背景换一张图片
// 注意这里面用了一个空的TextView,背景是一个图标,点击时换的就是这个图标
mHomeView = (TextView) findViewById(R.id.home_image_view);
mPondView = (TextView) findViewById(R.id.fish_image_view);
mMessageView = (TextView) findViewById(R.id.message_image_view);
mMineView = (TextView) findViewById(R.id.mine_image_view);
mHomeView.setBackgroundResource(R.drawable.comui_tab_home_selected);
}

// 使用 fragmentTransaction 隐藏fragment
private void hideFragment(Fragment fragment, FragmentTransaction ft) {
if (fragment != null) {
ft.hide(fragment);
}
} @Override
public void onClick(View v) {
FragmentTransaction fragmentTransaction = fm.beginTransaction();
switch (v.getId()) {
case R.id.home_layout_view:
// 非必须,可以删除掉
changeStatusBarColor(R.color.color_fed952);
// 更改背景图片
mHomeView.setBackgroundResource(R.drawable.comui_tab_home_selected);
mPondView.setBackgroundResource(R.drawable.comui_tab_pond);
mMessageView.setBackgroundResource(R.drawable.comui_tab_message);
mMineView.setBackgroundResource(R.drawable.comui_tab_person);
// 隐藏其他fragment
hideFragment(mCommonFragmentOne, fragmentTransaction);
hideFragment(mMessageFragment, fragmentTransaction);
hideFragment(mMineFragment, fragmentTransaction);
if (mHomeFragment == null) {
//添加一个新的fragment
mHomeFragment = new HomeFragment();
fragmentTransaction.add(R.id.content_layout, mHomeFragment);
} else {
// 显示当前fragment
mCurrent = mHomeFragment;
fragmentTransaction.show(mHomeFragment);
}
break;
case R.id.message_layout_view:
changeStatusBarColor(R.color.color_e3e3e3);
mMessageView.setBackgroundResource(R.drawable.comui_tab_message_selected);
mHomeView.setBackgroundResource(R.drawable.comui_tab_home);
mPondView.setBackgroundResource(R.drawable.comui_tab_pond);
mMineView.setBackgroundResource(R.drawable.comui_tab_person); hideFragment(mCommonFragmentOne, fragmentTransaction);
hideFragment(mHomeFragment, fragmentTransaction);
hideFragment(mMineFragment, fragmentTransaction);
if (mMessageFragment == null) {
mMessageFragment = new MessageFragment();
fragmentTransaction.add(R.id.content_layout, mMessageFragment);
} else {
mCurrent = mMessageFragment;
fragmentTransaction.show(mMessageFragment);
}
break;
case R.id.mine_layout_view:
changeStatusBarColor(R.color.color_00ffffff);
mMineView.setBackgroundResource(R.drawable.comui_tab_person_selected);
mHomeView.setBackgroundResource(R.drawable.comui_tab_home);
mPondView.setBackgroundResource(R.drawable.comui_tab_pond);
mMessageView.setBackgroundResource(R.drawable.comui_tab_message);
hideFragment(mCommonFragmentOne, fragmentTransaction);
hideFragment(mMessageFragment, fragmentTransaction);
hideFragment(mHomeFragment, fragmentTransaction);
if (mMineFragment == null) {
mMineFragment = new MineFragment();
fragmentTransaction.add(R.id.content_layout, mMineFragment);
} else {
mCurrent = mMineFragment;
fragmentTransaction.show(mMineFragment);
}
break;
} fragmentTransaction.commit();
}
}

Android 一个Activity 里面放置多个 Fragment 实现点击切换的Tab 页面效果的更多相关文章

  1. Android 一个Activity保存它自己的实例

    一个Activity保存他自己的实例的作用是,在其他Activity中可以方便的调用该Activity里的方法. 我们可以使用一个静态的变量保存当前Activity的实例,并将其标志为private访 ...

  2. 关于Fragment的点击切换数据滞留问题

    场景再现:当我使用tabLayout + Fragment 切换不同的fragment时,出现了数据重复显示的问题: 思考逻辑: - 每次切换fragment都会重新获取数据,但是list集合是全局的 ...

  3. android小功能:checkbox使用自己的背景点击切换背景

    xiazai_checkbox.xml <?xml version="1.0" encoding="utf-8"?> <selector xm ...

  4. 【转】Pro Android学习笔记(三六):Fragment(1):基本概念

    目录(?)[-] 为何引入Fragment 大小屏幕的适配 横屏竖屏切换 返回键 什么是Fragment 为何引入Fragment 我们之前的Activity都是都是全屏处理较为简单的单一事务功能,适 ...

  5. Android中Activity的四大启动模式实验简述

    作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握.今天我们就来通过实验演示,来帮助大家理解Activ ...

  6. 调用另一个Activity

    <转>调用另一个Activity Intent对象的使用 范例说明 前一个范例介绍了如何运用切换Layout的方式,进行手机页面间的转换.如果要转换的页面并不单只是背景.颜色或文字内容的不 ...

  7. ViewPager、Fragment、Matrix综合使用实现Tab滑页效果

    原文地址:http://www.cnblogs.com/kross/p/3372987.html 我们实现一个上面是一个可以左右滑动的页面,下面是三个可点击切换的tab按钮,tab按钮上还有一个激活条 ...

  8. 极致精简的fragment实现导航栏切换demo

    一个小demo.用button+fragment实现导航栏切换界面,适合刚接触的新手看一下. 效果图 点击第二个后 源码: 主界面 <span style="font-size:18p ...

  9. android开发之Fragment加载到一个Activity中

    Fragments 是android3.0以后添加的.主要是为了方便android平板端的开发.方便适应不同大小的屏幕.此代码是为了最简单的Fragment的使用,往一个Activity中添加Frag ...

随机推荐

  1. 闭包&装饰器

    闭包 1.函数引用 def test(): print('--test--') # 调用函数 test() # 引用函数 ret = test print(id(ret)) print(id(test ...

  2. hdu2121 最小树形图的虚根

    /* 最小树形图的第二题,终于有了一些理解 具体看注释 */ /* 无定根的最小树形图 建立虚root 每次只找最短的那条入边 最小树形图理解: 第一步:寻找最短弧集E:扫一遍所有的边,找到每个点权值 ...

  3. Python内置模块之time模块

    1:概述 时间表示的分类 时间戳 格式化的时间字符串 结构化时间 时间戳:时间戳表示的是从1970年1月1日整0点到目前秒的偏移量,数据类型是浮点型,主要用来让计算机看的 格式化的时间字符串:如 20 ...

  4. 用JAVA写一个简单的英文加密器

    package qhs; import java.util.Scanner; public class JiaM { public static void main(String[] args) { ...

  5. PyCharm之python书写规范--消去提示波浪线

    强迫症患者面对PyCharm的波浪线是很难受的,针对如下代码去除PyCharm中的波浪线: # _*_coding:utf-8_*_ # /usr/bin/env python3 A_user = & ...

  6. UEditor黑白名单配置

    在网上找了很多,都不对.自己尝试,代码如下: 在new UEditor之前加上: Object.assign(window.UEDITOR_CONFIG.whitList, { filling: [' ...

  7. 隐藏WIN10资源管理器中的3D对象文件夹

    1.WIN+R,打开运行窗口,输入“regdeit”启动注册表编辑器 2.定位到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersio ...

  8. element-ui上传文件带token

    template> <el-upload action="test" :headers="myHeaders"></el-upload& ...

  9. ionic2程序调试

    新手一枚,之前一直做.net开发,最近接触Ionic2,也没有人带,只能自己一点点抠文档,查资料.一直苦于无法直接调试打包发不好的app,只能在代码里面加上alert一点一点的抛出要看信息,感觉就像瞎 ...

  10. 执行shell脚本提示“-bash: ./checkP.sh: /bin/sh^M: bad interpreter: No such file or directory”解决方法

    在windows机器下新建了一个shell脚本如下