FragmentActivity + Fragment(通過hide和show來顯示fragment) + Fragment(通過viewpager來顯示fragment) 在Activity中 在佈局中 然後在fragment中會添加一個viewpager來再添加幾個fragment ...
FragmentActivity + Fragment(通過hide和show來顯示fragment) + Fragment(通過viewpager來顯示fragment)
在Activity中
//開啟事務 FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); //添加首頁 ft.add(R.id.content,network_fragment).commit();
FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction ft = fragmentManager.beginTransaction(); //隱藏 ft.hide(mFragments[mIndex]); //判斷是否添加 if(!mFragments[index].isAdded()){ ft.add(R.id.content,mFragments[index]).show(mFragments[index]); }else { ft.show(mFragments[index]); } ft.commit();
在佈局中
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginStart="@dimen/one_hundred_sixty" android:background="@color/mx_plus_background" /> <include android:id="@+id/id_ly_bottombar" android:layout_width="wrap_content" android:layout_height="match_parent" layout="@layout/leftbottombar" /> </FrameLayout>
然後在fragment中會添加一個viewpager來再添加幾個fragment
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_back" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.roadrover.libaudiosettings.widget.InterceptTouchViewPager android:id="@+id/id_content" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="@dimen/sixty_px" android:background="@drawable/content_bottom"/> <include android:id="@+id/id_ly_bottombar" layout="@layout/bottombar" android:layout_width="match_parent" android:layout_height="wrap_content" /> </FrameLayout>
在fragment中的ViewPager在添加新的fragment,
設置參數的時候最好不要用setTargetFragment,自己定義一個set方法(比如setInitFragment)就可以了,
設置manager時,要用getChildFragmentManager(fragment+fragment用這個),不能用getSupportFragmentManager(activity+fragment才用這個)
這是為了避免在我切換語言之後,viewpager中的fragment顯示不出來的bug。
mSpeakerFragment = new SpeakerFragment(); mSpeakerFragment.setInitFragment(EffectFragment.this); mAdapter = new FragmentPagerAdapter(getChildFragmentManager()) { // @Override public Fragment getItem(int arg0) { Logcat.d(TAG, "getItem = " + arg0); return mFragments.get(arg0); } @Override public int getCount() { return mFragments.size(); } };
FragmentStatePagerAdapter getChildFragmentManager