Fragment

作者: LazyerRookie | 来源:发表于2018-06-13 22:08 被阅读0次

一、什么是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解除关系时调用

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

      本文链接:https://www.haomeiwen.com/subject/ejnreftx.html