Android Tabhost with FragmentActivity
来源:互联网 发布:js判断小于等于 编辑:程序博客网 时间:2024/05/08 01:35
接續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; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // main layout採用預設的Tabhost mHost = (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))); } @Override protected void onPause() { // 漏掉這行一定出錯 lam.dispatchPause(isFinishing()); super.onPause(); } @Override protected 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; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_activity_1); fm = getSupportFragmentManager(); // 只當容器,主要內容已Fragment呈現 initFragment(new Fragment1()); } // 切換Fragment public 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 { @Override public 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() { @Override public 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"> <Button android: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与FragmentActivity
- android TabHost切换导致FragmentActivity重启
- 用FragmentActivity +FragmentTabHost 替换原有的tabhost
- FragmentActivity+FragmentTabHost+Fragement替代TabActibvity+TabHost+Activity
- FragmentActivity+FragmentTabHost+Fragement替代TabActibvity+TabHost+Activity
- Android Fragment FragmentActivity
- Android tabhost
- Android:TabHost
- TabHost Android
- Android TabHost
- Android TabHost
- android--tabhost
- android tabhost
- android Tabhost
- Android TabHost
- android tabhost
- Android TabHost
- Linux Fork函数讲解
- android开发实战系列(18)-- 与其他应用程序进行交互
- 改变,从你我开始
- or1200第一个程序
- 关于c++ stack一点小小的疑问
- Android Tabhost with FragmentActivity
- 模拟器iPhone5测试
- BIOS是如何从软盘加载系统引导程序的
- JSTL标签库
- MySql实现跨表查询
- android开发实战系列(19)-- 让用户转移到另一个应用程序
- ZOJ 1298 poj 1135 Domino Effect(最短路,dij)
- linux下防御ddos攻击
- Android的AlertDialog详解