像我这个有强迫症的人来说,自从TabActivity抛弃之后,再使用看到一个个警告和一条条划着的横线,心里很不舒服,现在终于下定决心用Fragment来替换掉TabActivity了!我的研究成果如下:

首先是MainActivity,它需要继承FragmentActivity(这里是指:版本是3.0之前的继承
FragmentActivity,3.0版本之后的继承Activity就可以),对于FragmentActivity的声明周期我就不过多介绍了,
和Activity差不了多少,自己也能弄明白!下边是MainActivity的代码:

  1. package net.loonggg.fragment;
  2. import android.os.Bundle;
  3. import android.support.v4.app.Fragment;
  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.Window;
  8. import android.widget.RadioButton;
  9. import android.widget.RadioGroup;
  10. import android.widget.RadioGroup.OnCheckedChangeListener;
  11. public class MainActivity extends FragmentActivity {
  12. private Fragment[] mFragments;
  13. private RadioGroup bottomRg;
  14. private FragmentManager fragmentManager;
  15. private FragmentTransaction fragmentTransaction;
  16. private RadioButton rbOne, rbTwo, rbThree, rbFour;
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. requestWindowFeature(Window.FEATURE_NO_TITLE);
  21. setContentView(R.layout.activity_main);
  22. mFragments = new Fragment[3];
  23. fragmentManager = getSupportFragmentManager();
  24. mFragments[0] = fragmentManager.findFragmentById(R.id.fragement_main);
  25. mFragments[1] = fragmentManager.findFragmentById(R.id.fragement_search);
  26. mFragments[2] = fragmentManager
  27. .findFragmentById(R.id.fragement_setting);
  28. fragmentTransaction = fragmentManager.beginTransaction()
  29. .hide(mFragments[0]).hide(mFragments[1]).hide(mFragments[2]);
  30. fragmentTransaction.show(mFragments[0]).commit();
  31. setFragmentIndicator();
  32. }
  33. private void setFragmentIndicator() {
  34. bottomRg = (RadioGroup) findViewById(R.id.bottomRg);
  35. rbOne = (RadioButton) findViewById(R.id.rbOne);
  36. rbTwo = (RadioButton) findViewById(R.id.rbTwo);
  37. rbThree = (RadioButton) findViewById(R.id.rbThree);
  38. bottomRg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
  39. @Override
  40. public void onCheckedChanged(RadioGroup group, int checkedId) {
  41. fragmentTransaction = fragmentManager.beginTransaction()
  42. .hide(mFragments[0]).hide(mFragments[1])
  43. .hide(mFragments[2]);
  44. switch (checkedId) {
  45. case R.id.rbOne:
  46. fragmentTransaction.show(mFragments[0]).commit();
  47. break;
  48. case R.id.rbTwo:
  49. fragmentTransaction.show(mFragments[1]).commit();
  50. break;
  51. case R.id.rbThree:
  52. fragmentTransaction.show(mFragments[2]).commit();
  53. break;
  54. default:
  55. break;
  56. }
  57. }
  58. });
  59. }
  60. }

下边对应的是MainActivity的布局文件activity_main.xml:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:background="@drawable/activity_bg"
  6. android:orientation="vertical" >
  7. <!-- 上边主页面 -->
  8. <fragment
  9. android:id="@+id/fragement_main"
  10. android:name="net.loonggg.fragment.FragmentMain"
  11. android:layout_width="fill_parent"
  12. android:layout_height="fill_parent"
  13. android:layout_weight="10" />
  14. <fragment
  15. android:id="@+id/fragement_search"
  16. android:name="net.loonggg.fragment.FragmentSearch"
  17. android:layout_width="fill_parent"
  18. android:layout_height="fill_parent"
  19. android:layout_weight="10" />
  20. <fragment
  21. android:id="@+id/fragement_setting"
  22. android:name="net.loonggg.fragment.FragmentSetting"
  23. android:layout_width="fill_parent"
  24. android:layout_height="fill_parent"
  25. android:layout_weight="10" />
  26. <!-- 底部菜单页面 -->
  27. <RadioGroup
  28. android:id="@+id/bottomRg"
  29. android:layout_width="fill_parent"
  30. android:layout_height="wrap_content"
  31. android:layout_weight="0.5"
  32. android:background="@drawable/tab_footer_bg"
  33. android:orientation="horizontal" >
  34. <RadioButton
  35. android:id="@+id/rbOne"
  36. style="@style/rg_btn_style"
  37. android:checked="true"
  38. android:drawableTop="@drawable/rb_one_btn_selector"
  39. android:text="首页" />
  40. <RadioButton
  41. android:id="@+id/rbTwo"
  42. style="@style/rg_btn_style"
  43. android:drawableTop="@drawable/rb_two_btn_selector"
  44. android:text="搜索" />
  45. <RadioButton
  46. android:id="@+id/rbThree"
  47. style="@style/rg_btn_style"
  48. android:drawableTop="@drawable/rb_three_btn_selector"
  49. android:text="设置" />
  50. </RadioGroup>
  51. </LinearLayout>

这里为了大家方便,展示一下项目的布局图:

再下边是要设计的首页界面,它是继承的Fragment,具体看代码:

  1. package net.loonggg.fragment;
  2. import android.os.Bundle;
  3. import android.support.v4.app.Fragment;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.TextView;
  8. public class FragmentMain extends Fragment {
  9. private TextView tv;
  10. @Override
  11. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  12. Bundle savedInstanceState) {
  13. return inflater.inflate(R.layout.fragment_main, container, false);
  14. }
  15. @Override
  16. public void onActivityCreated(Bundle savedInstanceState) {
  17. super.onActivityCreated(savedInstanceState);
  18. tv = (TextView) getView().findViewById(R.id.titleTv);
  19. tv.setText("首页");
  20. }
  21. }

接着是对应的布局文件代码fragment_main.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6. <include
  7. android:id="@+id/one_title"
  8. layout="@layout/title_bar" />
  9. <TextView
  10. android:layout_width="fill_parent"
  11. android:layout_height="fill_parent"
  12. android:gravity="center"
  13. android:text="这是首页"
  14. android:textColor="#000000" />
  15. </LinearLayout>

再接着是:搜索界面的代码:

  1. package net.loonggg.fragment;
  2. import android.os.Bundle;
  3. import android.support.v4.app.Fragment;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.TextView;
  8. public class FragmentSearch extends Fragment {
  9. private TextView tv;
  10. @Override
  11. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  12. Bundle savedInstanceState) {
  13. return inflater.inflate(R.layout.fragment_search, container, false);
  14. }
  15. @Override
  16. public void onActivityCreated(Bundle savedInstanceState) {
  17. super.onActivityCreated(savedInstanceState);
  18. tv = (TextView) getView().findViewById(R.id.titleTv);
  19. tv.setText("搜索");
  20. }
  21. @Override
  22. public void onPause() {
  23. super.onPause();
  24. }
  25. }

如上是对应的布局文件的代码fragment_search.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content"
  5. android:orientation="vertical" >
  6. <include layout="@layout/title_bar" />
  7. <TextView
  8. android:layout_width="fill_parent"
  9. android:layout_height="fill_parent"
  10. android:gravity="center"
  11. android:text="这是搜索界面"
  12. android:textColor="#000000" />
  13. </LinearLayout>

紧跟着是:设置界面的代码:

  1. package net.loonggg.fragment;
  2. import android.os.Bundle;
  3. import android.support.v4.app.Fragment;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.TextView;
  8. public class FragmentSetting extends Fragment {
  9. private TextView tv;
  10. @Override
  11. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  12. Bundle savedInstanceState) {
  13. return inflater.inflate(R.layout.fragment_setting, container, false);
  14. }
  15. @Override
  16. public void onActivityCreated(Bundle savedInstanceState) {
  17. super.onActivityCreated(savedInstanceState);
  18. tv = (TextView) getView().findViewById(R.id.titleTv);
  19. tv.setText("设置");
  20. }
  21. }

当然一样,下边对应的是设置界面的布局文件代码fragment_setting.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content"
  5. android:orientation="vertical" >
  6. <include layout="@layout/title_bar" />
  7. <TextView
  8. android:layout_width="fill_parent"
  9. android:layout_height="fill_parent"
  10. android:gravity="center"
  11. android:text="这是设置页面"
  12. android:textColor="#000000" />
  13. </LinearLayout>

最后是我用的title_bar.xml文件,这个文件是嵌入到各个界面中的那个顶部的标题的布局文件,代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content"
  5. android:background="@drawable/title_bg"
  6. android:gravity="center"
  7. android:orientation="vertical" >
  8. <TextView
  9. android:id="@+id/titleTv"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:layout_gravity="center"
  13. android:gravity="center"
  14. android:textColor="#ffffff"
  15. android:textSize="20sp" />
  16. </LinearLayout>

到这里就基本完成了!!!你会了吗?

用Fragment实现如新浪微博一样的底部菜单的切换的更多相关文章

  1. Android自己定义TabActivity(实现仿新浪微博底部菜单更新UI)

    现在Android上非常多应用都採用底部菜单控制更新的UI这样的框架,比如新浪微博 点击底部菜单的选项能够更新界面.底部菜单能够使用TabHost来实现,只是用过TabHost的人都知道自己定义Tab ...

  2. 转-Fragment+FragmentTabHost组件(实现新浪微博底部菜单)

    http://www.cnblogs.com/lichenwei/p/3985121.html 记得之前写过2篇关于底部菜单的实现,由于使用的是过时的TabHost类,虽然一样可以实现我们想要的效果, ...

  3. 安卓开发笔记——Fragment+FragmentTabHost组件(实现新浪微博底部菜单)

    记得之前写过2篇关于底部菜单的实现,由于使用的是过时的TabHost类,虽然一样可以实现我们想要的效果,但作为学习,还是需要来了解下这个新引入类FragmentTabHost 之前2篇文章的链接: 安 ...

  4. [Android] Android 使用 FragmentTabHost + Fragment 实现 微信 底部菜单

    Android 使用 FragmentTabHost + Fragment 实现 微信 底部菜单 利用FragmentTabHost实现底部菜单,在该底部菜单中,包括了4个TabSpec,每个TabS ...

  5. Xamarin.Android 利用Fragment实现底部菜单

    效果图: 第一步:添加引用 引用 Crosslight.Xamarin.Android.Support.v7.AppCompat 这个包. 第二步:绘制Main和Fragment界面 fg_home. ...

  6. Android底部菜单的实现

    前言:以前制作菜单使用TabHost,但是android 3.0以上就被废弃了,google已经不建议使这个类了.ActionBar也是菜单,不过在头部,算是导航了 ===本文就介绍怎么制作底部菜单= ...

  7. Android自定义控件----RadioGroup实现APP首页底部Tab的切换

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  8. 转-TabHost组件(一)(实现底部菜单导航)

    http://www.cnblogs.com/lichenwei/p/3974009.html 什么是TabHost? TabHost组件的主要功能是可以进行应用程序分类管理,例如:在用户使用wind ...

  9. Android应用主界面底部菜单实现

    介绍 现在绝大多数主流的应用主界面,都会包含一个底部菜单,就拿腾讯的QQ与微信来说,看起来是这样的  <---我是底部菜单 原理 在很久以前,可以通过TabActivity实现相关功能,自从Fr ...

随机推荐

  1. "ssllabs" website and "testssl" website

    "https://www.ssllabs.com" could scan your server and give results about the weakness of yo ...

  2. HCNA配置console线路密码aaa认证

    Please check whether system data has been changed, and save data in time Configuration console time ...

  3. php中的curl_multi的应用(php多进程)

    相信许多人对PHP手册中语焉不详的curl_multi一族的函数头疼不已,它们文档少,给的例子 更是简单的让你无从借鉴,我也曾经找了许多网页,都没见一个完整的应用例子. curl_multi_add_ ...

  4. 1.jdk的安装

    1.下载jdk放到某(E)盘底下的(java)某文件夹里 2.配置环境变量 (1)配置JAVA_HOME,CLASSPATH,PATH三个变量 其中JAVA_HOME必须的 JAVA_HOME=E:\ ...

  5. innerHTML动态添加html代码和脚本兼容性问题处理方法

    给某个元素的innerHTML赋值,并使得值中的js代码有效(兼容多个浏览器) 症状:给某个元素的 innerHTML 设置值时,如果提供的 HTML 代码中包含js脚本,很多时候这些脚本无效,或者在 ...

  6. 【JavaScript 封装库】BETA 2.0 测试版发布!

    /* 源码作者: 石不易(Louis Shi) 联系方式: http://www.shibuyi.net =============================================== ...

  7. 使用browsermob代理出现错误java.lang.NoClassDefFoundError: org/littleshoot/proxy/HttpFiltersSource

    使用browsermob代理做埋点数据,maven配置的包如下 <dependency> <groupId>net.lightbody.bmp</groupId> ...

  8. 二叉索引树,LA2191,LA5902,LA4329

    利用了二进制,二分的思想的一个很巧妙的数据结构,一个lowbit(x):二进制表示下的最右边的一个1开始对应的数值. 那么如果一个节点的为x左孩子,父亲节点就是 x + lowbit(x),如果是右孩 ...

  9. 问题 B: C++习题 对象数组输入与输出

    题目描述 建立一个对象数组,内放n(n<10)个学生的数据(学号.成绩),用指针指向数组首元素,输出第奇数(1,3,5,7)个学生的数据. 输入 n和n个学生的学号.成绩 输出 奇数学生的数据 ...

  10. 2017.11.2 JavaWeb----第六章 Servlet技术

    JavaWeb ------第六章 Servlet技术 (1)在Web应用程序开发中,一般由JSP JavaBean技术和 Servlet技术的结合实现MVC开发模式.在MVC开发模式中将Web程序的 ...