控件-----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) {
    }

}

猜你喜欢

转载自blog.csdn.net/qq_36968707/article/details/85286996
今日推荐