控件-----fragment使用(二)

接下來說一下第二種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) {
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章