【Android】Fragment的静态加载和动态加载【Fragment是基于Activity的封装】

参考:https://www.w3cschool.cn/uawnhh/9zosjozt.html

A、静态加载【1、2、3】三个文件即可【必须指定FragmentContainerView的name属性】

B、动态加载:【1、2、3、4】四个文件执行【不能指定FragmentContainerView的name属性】

1、fragment_first.xml文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:text="我是fragment-first"
        android:gravity="center"
        android:textColor="#00f"
        android:layout_height="match_parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

2、对应匹配一个FirstFragment.kt文件

package com.example.kotlingradletemplatefirst.myfragment


import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.example.kotlingradletemplatefirst.R


class FirstFragment : Fragment(R.layout.fragment_first) {
    override fun onAttach(context: Context) {
        super.onAttach(context)
        println("onAttach")
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        println("onCreateView")
        /**
         * 1、父方法内部返回结果为:return inflater.inflate(R.layout.fragment_first, container, false)
         * 2、务必注意:这里的R.layout.fragment_first【必须是fragment的布局文件】
         */
        return super.onCreateView(inflater, container, savedInstanceState)
        // return inflater.inflate(R.layout.fragment_first, container, false)
    }
}

必须把以上2个资源文件分别嵌入Activity中!

3、activity嵌入fragment】activity_first.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button_switch"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:backgroundTint="#00f"
        android:text="点击显示fragment内容"
        tools:ignore="MissingConstraints" />

    <!--
        1、这里基于FragmentContainerView框架嵌入fragment的xml代码
        2、这里指定name属性,则代表静态加载,未指定则动态加载
    -->
    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment_container_first"
        android:name="com.example.kotlingradletemplatefirst.myfragment.FirstFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" />

</androidx.constraintlayout.widget.ConstraintLayout>

4、【activity调用fragment】FirstActivity.kt

package com.example.kotlingradletemplatefirst

import android.annotation.SuppressLint
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.commit
import com.example.kotlingradletemplatefirst.myfragment.FirstFragment

class FirstActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_first)

        val button = findViewById<Button>(R.id.button_switch)

        button.setOnClickListener {
            /**
             * 1、点击button后,动态嵌入fragment
             */
            supportFragmentManager.commit(true) {
                add(R.id.fragment_container_first, FirstFragment())
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值