接下來說一下第二種fragment的使用。單獨用fragment有兩種實現方式:
一、直接在xml裏添加的方式
<fragment android:name="bai.bai.bai.demo.fragment.Fragment1"//這個name就是你新建的自定義類Fragment android:id="@+id/fragment_1" android:layout_width="match_parent" android:layout_height="500dp"/>
二、在代碼裏添加的方式
1、在xml添加一個fragment的父容器,比如LinearLayout
<LinearLayout android:id="@+id/ll_fragment" android:layout_width="match_parent" android:layout_height="200dp" android:orientation="horizontal" />
2、在代碼裏添加
class MyFragmentActivity : FragmentActivity() , Fragment1.OnFragmentInteractionListener , Fragment2.OnFragmentInteractionListener { private lateinit var mFragmentTransaction: FragmentTransaction private lateinit var mFragment1: Fragment1 private lateinit var mFragment2: Fragment2 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_my_fragment) initFragment2() initListener2() } private fun initFragment2(){ mFragment1 = Fragment1.newInstance("bai", "yun") mFragment2 = Fragment2.newInstance("bai", "yun") mFragmentTransaction = supportFragmentManager.beginTransaction() mFragmentTransaction.add(R.id.ll_fragment, mFragment1, "fragment111") mFragmentTransaction.commit() } private fun initListener(){ btn_show_or_hide.setOnClickListener { val sfm = supportFragmentManager.beginTransaction() //隱藏時可以通過兩種方式獲取fragment對象,一種是如下findFragmentByTag,另一種是findFragmentById,這種使用於xml添加的fragment sfm.hide(supportFragmentManager.findFragmentByTag("fragment111")) sfm.add(R.id.ll_fragment, mFragment2, "fragment222") //sfm.replace(R.id.ll_fragment, mFragment2, "fragment222") //添加fragment時可以add也可以replace,add切換fragment時不會重新創建,是什麼樣子切換回來還是什麼樣子;用replace的效果就是:切換fragment時每次都會重新創建初始化。比如,fragment1,add添加fragment2時,fragment生命週期不會走onPause,onStop,onDestory,而如果是replace的話就會走 sfm.addToBackStack(null) sfm.commit() } } override fun onFragmentInteraction222(string: String) { Log.d("baibai", "onFragmentInteraction222") Log.d("baibai", string) } override fun onFragmentInteraction(uri: Uri) { } }