此文解决我这两天的问题,故转载:原文Android Tabhost with FragmentActivity

 

2012-05-07 更新)接續Android TabHost中切換Activity記錄了使用ActivityGroup達到在TabHost中切換Activity的方法,也在Android Screen Orientation Event螢幕方向處理+Acitivity Liftcycle記錄了當螢幕方向改變時的處理,這篇小蛙繼續記錄用FragmentActivity取代ActivityGroup,透過FragmentActivity內建的BackStack來管理倒退歷程。

MainTabActivity.java : 主要的Tabhost Activity。

public class MainTabActivity extends Activity {private TabHost mHost;// 在Activity中使用Tabhost必須要有LocalActivityManager物件來設定
    LocalActivityManager lam;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// main layout採用預設的TabhostmHost = (TabHost) findViewById(android.R.id.tabhost);lam = new LocalActivityManager(MainTabActivity.this, false);lam.dispatchCreate(savedInstanceState);mHost.setup(lam);mHost.addTab(mHost.newTabSpec("Tab1").setIndicator("Tab1").setContent(new Intent(MainTabActivity.this, FragmentActivity1.class)));mHost.addTab(mHost.newTabSpec("Tab2").setIndicator("Tab2").setContent(new Intent(MainTabActivity.this, FragmentActivity2.class)));}@Overrideprotected void onPause() {// 漏掉這行一定出錯
        lam.dispatchPause(isFinishing());super.onPause();}@Overrideprotected void onResume() {// 漏掉這行一定出錯
        lam.dispatchResume();super.onResume();}
}

FragmentActivity1.java : 第一個Tab中用來管理Fragment的FragmentActivity。(2012-05-07更新)經由Jay留言後,小蛙詳細測了一下,發現FragmentActivity主畫面中的Button是沒辦法消失的(因為FragmentActivity的目的關係),因此改成這樣,讓FragmentActivity純粹當成容器,主要的內容還是以Fragment為主。(這個方法不是唯一,但是一個可行的方法,應該也有更好的做法!)

public class FragmentActivity1 extends FragmentActivity {public static FragmentManager fm;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.fragment_activity_1);fm = getSupportFragmentManager();// 只當容器,主要內容已Fragment呈現initFragment(new Fragment1());}// 切換Fragmentpublic static void changeFragment(Fragment f){changeFragment(f, false);}// 初始化Fragment(FragmentActivity中呼叫)public static void initFragment(Fragment f){changeFragment(f, true);}private static void changeFragment(Fragment f, boolean init){FragmentTransaction ft = fm.beginTransaction();ft.replace(R.id.simple_fragment, f);if(!init)ft.addToBackStack(null);ft.commit();}
}

Fragment1.java : 真正使用到的Fragment。

public class Fragment1 extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View v = inflater.inflate(R.layout.fragment_1, container, false);Button tv = (Button)v.findViewById(R.id.button2);tv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 直接呼叫FragmentActivity1的靜態方法來做切換FragmentActivity1.changeFragment(new Fragment2());}});return v;}
}

fragment_acitivity_1.xml : FragmentActivity layout。(2012-05-07修改) FragmentActivity只用來當容器,而不真正呈現內容(僅把Fragment內容載入)。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"android:id="@+id/simple_fragment">
</LinearLayout>

fragment1.xml:Fragment layout,FragmentActivity載入的真正內容。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Button" />
</LinearLayout>

最後別忘了在AndroidManifest.xml中加入android:configChanges="orientation"設定。這樣就成功的使用在Activity中使用Tabhost並且透過FragmentActivity來管理Fragment囉!

 

Android Tabhost with FragmentActivity相关推荐

  1. Android TabHost中切換、修改需要显示的Activity

    上個星期跟盛哥試了一段時間使用Fragment後還是不得其門而入(兩個人對Fragment都還不太熟悉),卡住的原因是現在有兩個Tab,當Tab1進入到第二個畫面,Tab2進到第三個畫面,但使用者切回 ...

  2. Android TabHost和xml定义Menu应用

    Android TabHost和xml定义Menu应用 http://files.cnblogs.com/hnrainll/TabMenu.zip

  3. android mainactivity 刷新fragment,Android刷新从FragmentActivity android.support.v4.app.Fragment

    我使用FragmentTabHost创建dinamically FragmentActivity.我想通过单击操作栏中的项目来刷新当前选项卡中托管的片段.Android刷新从FragmentActiv ...

  4. Android TabHost中实现标签的滚动以及一些TabHost开发的奇怪问题

    最近在使用TabHost的时候遇到了一些奇怪的问题,在这里总结分享备忘一下. 首先说一点TabActivity将会被FragmentActivity所替代,但是本文中却是使用的TabActivity. ...

  5. android tabhost 动画,Android中使用TabHost 与 Fragment 制作页面切换效果

    三个标签页置于顶端 效果图: 在文件BoardTabHost.java中定义页面切换的效果:切换页面时,当前页面滑出,目标页面滑入.这是2个不同的动画设定动画时要区分对待 import android ...

  6. android Tabhost部件

    本文结合源代码和实例来说明TabHost的用法. 使用TabHost 可以在一个屏幕间进行不同版面的切换,例如android自带的拨号应用,截图: 查看tabhost的源代码,主要实例变量有: pri ...

  7. android tabhost --android UI 学习

    2019独角兽企业重金招聘Python工程师标准>>> 实现TabHost有三种方式:继承自TabActivity,ActivityGroup和自定义的Activity 实现效果图: ...

  8. 【Android 应用开发】Android - TabHost 选项卡功能用法详解

    TabHost效果图 : 源码下载地址 : http://download.csdn.net/detail/han1202012/6845105        . 作者 :万境绝尘  转载请注明出处  ...

  9. Android --- TabHost 切换时,改变选项卡下字体的状态(大小、加粗、默认被选中第一个)

    上效果图: MiddleFragment.java 代码如下 import android.os.Bundle; import android.view.LayoutInflater; import ...

最新文章

  1. 味道不错的NBearLite查询语法
  2. 并发编程-01并发初窥
  3. 易语言复制C指针,易语言教程API模块制作cmd复制文件
  4. async 和 await 的进阶
  5. 1103: 平均学分绩点(函数专题)
  6. 总结计算机语言的基本元素,认识程序设计中基本元素教案.doc
  7. 02_反汇编_反编译
  8. Linux创建SSH信任关系
  9. 23种设计模式(4)-生成器模式
  10. [self addChild:gameLayer z:1 tag:LayerTagGameLayer] z值含义
  11. 关于java重载函数,参数为null时,调用的处理。(精确性原则)
  12. ASR识别(自动语音识别)
  13. Unity3D基础4:空物体与预制体
  14. Please either set ERLANG_HOME to point to your Erlang installation or place
  15. vue表格根据属性值设置背景颜色、vue表格设置鼠标悬浮背景颜色、vue表格的隔行变色修改背景颜色
  16. 深度学习手记(八)之PTB实现LSTM模型
  17. 2019/8/18 ECU和DCU
  18. Cassandra CQL使用详解
  19. 国外免费电子书资源下载
  20. (六)Activiti之实现学生请假流程

热门文章

  1. Mybatis---总结
  2. FIR.im Weekly - 上周微博热转资源精选
  3. 大盘过4000,注意风险~
  4. JavaScript学习笔记(八)--- 函数表达式
  5. Informatica:当好大数据的清道夫
  6. ubuntu 安装mysql ,postgresql (转)
  7. javascript之DOM操作
  8. 企业级IT运维平台的发展趋势与规划要点
  9. 外媒:英国索尔兹伯里事件中受伤警察已重返工作
  10. HDU - 6438(贪心+思维)