【16】Fragment

1.什么是Fragment

因为Android设备尺寸大小不一 同一应用在不同尺寸上显示会有很大差异,fragment就是为了解决这个问题推出的。fragment可以看做是Activity界面的一部分,它有属于自己的生命周期和事件处理机制而且它可以动态的添加、替换、移除。

【Fragment是依赖于Activity的,不能独立存在的。
一个Activity里可以有多个Fragment。
一个Fragment可以被多个Activity重用。
Fragment有自己的生命周期,并能接收输入事件。
我们能在Activity运行时动态地添加或删除Fragment。】

2.使用方式

2.1静态

Step 1:定义Fragment的布局,就是fragment显示内容的

Step 2:自定义一个Fragment类,需要继承Fragment或者他的子类,重写onCreateView()方法 在该方法中调用:inflater.inflate()方法加载Fragment的布局文件,接着返回加载的view对象

Step 3:在需要加载Fragment的Activity对应的布局文件中添加fragment的标签, 记住,name属性是全限定类名哦,就是要包含Fragment的包名

Step 4: Activity在onCreate( )方法中调用setContentView()加载布局文件即可!

class LeftFragment : Fragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.left_fragment, container, false)
    }
}

重写了Fragment的onCreateView()方法,然后在这个方法中通过 LayoutInflater的inflate()方法将刚才定义的left_fragment布局动态加载进来


    
    

2.2动态

activity_main.xml布局中声明一个FrameLayout


    
    
    
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        button.setOnClickListener {
            replaceFragment(AnotherRightFragment())
        }
        replaceFragment(RightFragment())
    }
    private fun replaceFragment(fragment: Fragment) {
        val fragmentManager = supportFragmentManager
        val transaction = fragmentManager.beginTransaction()
        transaction.replace(R.id.rightLayout, fragment)
        transaction.commit()
} }

动态添加Fragment主要分为5步。

(1) 创建待添加Fragment的实例。
(2) 获取FragmentManager,在Activity中可以直接调用getSupportFragmentManager()

方法获取。
(3) 开启一个事务,通过调用beginTransaction()方法开启。

(4) 向容器内添加或替换Fragment,一般使用replace()方法实现,需要传入容器的id和待添 加的Fragment实例。

(5) 提交事务,调用commit()方法来完成。

3.Fragment生命周期

Fragment生命周期和Activity生命周期一样,不过Fragment还提供了一些附加的回调方法,下面我们就重点看一 下这几个回调。

onAttach():当Fragment和Activity建立关联时调用。

onCreateView():为Fragment创建视图(加载布局)时调用。

onActivityCreated():确保与Fragment相关联的Activity已经创建完毕时调用。

onDestroyView():当与Fragment关联的视图被移除时调用。

onDetach():当Fragment和Activity解除关联时调用。

你可能感兴趣的:(android)