Android开发之Fragment

本文详细介绍了Android中的Fragment使用,包括静态与动态加载,以及Fragment的生命周期和通信方式。通过创建Fragment布局和类,实现Fragment在主界面的显示。同时探讨了FragmentTransaction在替换操作中的应用。此外,还讲解了Fragment的生命周期状态,如运行、暂停、停止和销毁,以及相应的回调方法。最后,提到了回退fragment的方法popBackStack。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Fragment


首先创建左右两个碎片的布局,然后对应布局分别写两个继承于Fragment的类,重写类中的onViewCreate方法


在重写方法内获得碎片布局的View。


最后在main布局中添加两个fragment控件,注意每个控件要添加android:name="[里面是对应的碎片类]"。


left

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created by Administrator on 2017/11/20.
 */

public class LeftFragment extends Fragment{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){
        View view=inflater.inflate(R.layout.activity_leftfragment,container,false);
        return view;
    }
}


right

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created by Administrator on 2017/11/20.
 */

public class RightFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){
        View view=inflater.inflate(R.layout.activity_rightfragment,container,false);
        return view;
    }
}

main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    tools:context="com.example.administrator.demos.MainActivity">

    <fragment
        android:name="com.example.administrator.demos.LeftFragment"
        android:id="@+id/leftFragment"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"/>

    <fragment
        android:name="com.example.administrator.demos.RightFragment"
        android:id="@+id/rightFragment"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"/>

</LinearLayout>



动态加载Fragment:


动态加载fragment需要标签布局作为载体,即须在主布局中定义一个标签布局。


然后在主类中将frgment布局加载到主布局中的标签布局中。


方法是创建一个FragmentTransaction对象,然后通过调用该对象的replace方法传入标签布局的id和对应fragment的对象,最后调用commit方法即可。


碎片的布局和类跟静态加载一样。


FragmentManager


FragmentTransaction


main.java

replaceFragment(new RightFragment());

    public void replaceFragment(Fragment fragment){
        FragmentManager fragmentManager=getFragmentManager();
        FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.rightFragment,fragment);
        fragmentTransaction.commit();
    }

main.xml

    <FrameLayout
        android:id="@+id/rightFragment"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent">
    </FrameLayout>


碎片的通信:


想要在碎片中获得其它活动的示例可用MainActivity mainActivity=(MainActivity)getActivity();


想要在活动中获得碎片的实例可用RightFragment rightFragment=(RightFragment)getFragmentManager().findFragmentById(R.id.rightFragment);


获得了各自的实例后就可以调用它们的属性和方法。



碎片的生命周期:




1. 运行状态 
当一个碎片是可见的,并且它所关联的活动正处于运行状态时,该碎片也处于运行状态。

2. 暂停状态 
当一个活动进入暂停状态时(由于另一个未占满屏幕的活动被添加到了栈顶),与它相关联的可见碎片就会进入到暂停状态。

3. 停止状态 
当一个活动进入停止状态时,与它相关联的碎片就会进入到停止状态。或者通过调用FragmentTransaction 的remove()、replace()方法将碎片从活动中移除,但有在事务提交之前调用addToBackStack()方法,这时的碎片也会进入到停止状态。总的来说,进入停止状态的碎片对用户来说是完全不可见的,有可能会被系统回收。

4. 销毁状态 
碎片总是依附于活动而存在的,因此当活动被销毁时,与它相关联的碎片就会进入到销毁状态。或者通过调用FragmentTransaction 的remove()、replace()方法将碎片从活动中移除,但在事务提交之前并没有调用addToBackStack()方法,这时的碎片也会进入到销毁状态。

常用回调事件方法

onAttach() 
当碎片和活动建立关联的时候调用。

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

onActivityCreated() 
确保与碎片相关联的活动一定已经创建完毕的时候调用。

onDestroyView() 
当与碎片关联的视图被移除的时候调用。

onDetach() 
当碎片和活动解除关联的时候调用。


回退fragment方法 popBackStack

getActivity.getFragmentManager.popBackStack(String name,int flags)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值