美文网首页四大组件
Fragment(四)——Fragment动态使用

Fragment(四)——Fragment动态使用

作者: 奔跑的佩恩 | 来源:发表于2019-07-11 20:05 被阅读0次

前言

在学习完Fragment的静态使用和Fragment常用API后,这节我们就来学习下Fragment的动态加载吧。

今天涉及的内容:

  1. Fragment动态加载前的准备
  2. Fragment动态加载实例
  3. Fragment动态加载和静态加载的区别
  4. 参考文章

先来波效果图


1.gif

一. Fragment动态加载前的准备

在动态加载Fragment之前,我们先要在FragmentActivity对应的activity_main.xml中添加一个帧布局作为Fragment的容器。以我写的一个activity_main.xml代码为例:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".MainActivity">


    <TextView
        android:id="@+id/tv_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="Hello World!"
        android:textColor="#000000"
        android:textSize="16sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_confirm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="Button"
        app:layout_constraintEnd_toStartOf="@+id/btn_test"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tv_text" />

    <Button
        android:id="@+id/btn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btn_confirm"
        app:layout_constraintTop_toTopOf="@+id/btn_confirm" />

    <FrameLayout
        android:id="@+id/fr_layout"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginTop="5dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btn_confirm" />

</androidx.constraintlayout.widget.ConstraintLayout>

以上代码中 FrameLayout 即为Fragment要显示的容器。

二.Fragment动态加载实例

Fragment的动态加载基本上用到两个方法,一个是 add(),一个是replace()。其中add()多用于"显示当前Fragment,隐藏其他Fragment"的情况,而replace()则多用于"显示当前Fragment,关闭上一个Fragment"的情况。由于"显示当前Fragment,隐藏其他Fragment"的情况用得比较多,所以下面以add()动态加载为例。
下面以FragmentActivity中动态加载FragmentA和FragmentB为例。

2.1 写一个 FragmentA,继承Fragment

FragmentA代码如下:

public class FragmentA extends Fragment {

    private View mLayoutView;
    private Context mContext;
    private TextView mTvTestA;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        this.mContext=context;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mLayoutView = inflater.inflate(R.layout.fragment_a, container, false);

        initView();
        initData();
        setListener();

        return mLayoutView;
    }

    private void initView(){
        mTvTestA=mLayoutView.findViewById(R.id.tv_a);
    }

    private void initData(){
        Bundle bundle=getArguments();
        String value="";
        if(bundle!=null) {
             value = bundle.getString("A");
        }
        mTvTestA.setText("我是 A Fragment:  "+value);
    }

    private void setListener(){}

}
2.2 FragmentA对应布局

FragmentA对应布局代码fragment_a.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".MainActivity"
    android:clickable="true"
    android:background="@color/blue">


    <TextView
        android:id="@+id/tv_a"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:text="Hello World!"
        android:textColor="#000000"
        android:textSize="16sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
2.3 FragmentB类及对应xml文件

FragmentB代码与FragmentA基本一样,布局也一样,只不过把对应的a改成了b,这里就不做多的解释了。

2.4 在MainActivity中的使用

相关文章

网友评论

    本文标题:Fragment(四)——Fragment动态使用

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