一、什么是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;
}
}
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF8845">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="我是左边的Fragment"/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.strive.fragmenttest.MainActivity">
<fragment
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/left_fragment"
android:name="com.example.strive.fragmenttest.LeftFragment"
android:layout_weight="1"/>
<fragment
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/right_fragment"
android:name="com.example.strive.fragmenttest.RightFragment"
android:layout_weight="1"/>
</LinearLayout>
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解除关系时调用
四、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的方法