但是Fragment之間要怎麼切換呢?
這邊使用TabHost 來分成多頁,在每個Fragment之間要怎麼切換,就是個問題
我們使用FragmentTransaction+FragmentManager來處理這個問題
example:
Fragment galleryFragment = new GalleryFragment(); Bundle args = new Bundle(); args.putString("參數名稱", 參數); galleryFragment.setArguments(args);//pass argument to target fragment FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction ft = fragmentManager.beginTransaction(); ft.replace(R.id.container,galleryFragment); ft.addToBackStack(null); ft.commit();
GalleryFragment是目的fragment,而這段則是寫在來源fragment
但這邊可能會遇到一個問題(bug)No View Found For id ...... (illegalStateException)
該怎辦呢?問題就出在ft.replace(R.id.container,galleryFragment)這行這個R.id.container必須要在TabHost(Parent)裡面的XML有個FrameLayout
看一下這個TabHost的xml:<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- Tab標籤 --> <TabWidget android:id="@android:id/tabs" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone" /> <!-- 標籤內容顯示區塊 --> <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" /> </LinearLayout> </android.support.v4.app.FragmentTabHost>
有看到@+id/container這個,如果你隨便打content_frame(直接照抄之類的容易出現這樣的錯誤)
就會找不到這個id 因此就在跳轉的時候出現錯誤,所以搞懂了這個問題以後,就可以自己改寫囉!
end