接下来说一下第二种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) { } }