Fragment

一、什么是Fragment

Fragment也成为碎片,可以很灵后的加载到Activity中,使程序更好的利用屏幕的空间,因为使用频率很多,因此也被称为第五大组件。

二、Fragment加载到Activity中的两种方法

1.静态加载
创建一个继承Fragment的类,在onCreate()方法中绑定布局文件,在Activity的布局文件中指定Fragment即可。

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

    

    
    

2.动态加载
在程序中用Fragment Manager来动态管理Fragment

 public void registFragment(Fragment fragment){
        android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
        android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.lastfragment,fragment);
        fragmentTransaction.commit();
    }

动态加载步骤:

  • 首先创建出一个需要被加载的Fragment的实例
  • 获取Fragment Manager,可以调用getSupportFragmentManager()方法来获得
  • 调用Fragment Manager的beginTransaction()方法来开启一个事务,返回类型为FragmentTransaction
  • 向容器内添加Fragment,调用FragmentTransaction的replace()方法或者add()方法,需要传入传入容器的id和需要添加的Fragment的实例
  • 调用FragmentTransaction的commit()方法提交事务

三、Fragment的生命周期

onAttach():当Fragment与活动产生联系时调用
onCreateView():为Fragment创建视图
onActivityCreated():和随Fragment相关的活动完全创建完毕后执行
onDestroyView():当Fragment的视图移除时调用
onDetach():当Fragment和Activity解除关系时调用

image.png

四、Fragment的通信

1.在Fragment中调用Activity的方法
通过getActivity()方法获取到和当前Fragment相关联的活动,然后直接调用活动的方法

MainActivity activity = (MainActivity)getActivity();
activity.methodA();

2.Activity中调用Fragment的方法

 LastFragment lastFragment = 
                (LastFragment) getSupportFragmentManager().findFragmentById(R.id.lastfragment);
        lastFragment.sayWhat();

通过调用FragmentManager的findFragmentById()方法获取到Fragment的实例,然后就能直接调用到Fragment的方法了
3.Fragment中调用其他Fragment的方法

public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MainActivity activity = (MainActivity) getActivity();
        LeftFragment leftFragment =
                (LeftFragment) activity.getSupportFragmentManager().findFragmentById(R.id.left_fragment);
        leftFragment.say();
    }

在一个Fragment中获取到与之相关联的Activity,在通过Activity获取到另外一个Fragment的实例,再调用该Fragment的方法

你可能感兴趣的:(Fragment)