Android Tabhost with FragmentActivity
此文解决我这两天的问题,故转载:原文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相关推荐
- Android TabHost中切換、修改需要显示的Activity
上個星期跟盛哥試了一段時間使用Fragment後還是不得其門而入(兩個人對Fragment都還不太熟悉),卡住的原因是現在有兩個Tab,當Tab1進入到第二個畫面,Tab2進到第三個畫面,但使用者切回 ...
- Android TabHost和xml定义Menu应用
Android TabHost和xml定义Menu应用 http://files.cnblogs.com/hnrainll/TabMenu.zip
- android mainactivity 刷新fragment,Android刷新从FragmentActivity android.support.v4.app.Fragment
我使用FragmentTabHost创建dinamically FragmentActivity.我想通过单击操作栏中的项目来刷新当前选项卡中托管的片段.Android刷新从FragmentActiv ...
- Android TabHost中实现标签的滚动以及一些TabHost开发的奇怪问题
最近在使用TabHost的时候遇到了一些奇怪的问题,在这里总结分享备忘一下. 首先说一点TabActivity将会被FragmentActivity所替代,但是本文中却是使用的TabActivity. ...
- android tabhost 动画,Android中使用TabHost 与 Fragment 制作页面切换效果
三个标签页置于顶端 效果图: 在文件BoardTabHost.java中定义页面切换的效果:切换页面时,当前页面滑出,目标页面滑入.这是2个不同的动画设定动画时要区分对待 import android ...
- android Tabhost部件
本文结合源代码和实例来说明TabHost的用法. 使用TabHost 可以在一个屏幕间进行不同版面的切换,例如android自带的拨号应用,截图: 查看tabhost的源代码,主要实例变量有: pri ...
- android tabhost --android UI 学习
2019独角兽企业重金招聘Python工程师标准>>> 实现TabHost有三种方式:继承自TabActivity,ActivityGroup和自定义的Activity 实现效果图: ...
- 【Android 应用开发】Android - TabHost 选项卡功能用法详解
TabHost效果图 : 源码下载地址 : http://download.csdn.net/detail/han1202012/6845105 . 作者 :万境绝尘 转载请注明出处 ...
- Android --- TabHost 切换时,改变选项卡下字体的状态(大小、加粗、默认被选中第一个)
上效果图: MiddleFragment.java 代码如下 import android.os.Bundle; import android.view.LayoutInflater; import ...
最新文章
- 味道不错的NBearLite查询语法
- 并发编程-01并发初窥
- 易语言复制C指针,易语言教程API模块制作cmd复制文件
- async 和 await 的进阶
- 1103: 平均学分绩点(函数专题)
- 总结计算机语言的基本元素,认识程序设计中基本元素教案.doc
- 02_反汇编_反编译
- Linux创建SSH信任关系
- 23种设计模式(4)-生成器模式
- [self addChild:gameLayer z:1 tag:LayerTagGameLayer] z值含义
- 关于java重载函数,参数为null时,调用的处理。(精确性原则)
- ASR识别(自动语音识别)
- Unity3D基础4:空物体与预制体
- Please either set ERLANG_HOME to point to your Erlang installation or place
- vue表格根据属性值设置背景颜色、vue表格设置鼠标悬浮背景颜色、vue表格的隔行变色修改背景颜色
- 深度学习手记(八)之PTB实现LSTM模型
- 2019/8/18 ECU和DCU
- Cassandra CQL使用详解
- 国外免费电子书资源下载
- (六)Activiti之实现学生请假流程