Android 多个 Fragment 同时显示

在 Android 开发中,Fragment 是一种非常强大的组件,允许我们在同一个活动(Activity)中展示多个 UI 部件。通过使用 Fragment,我们可以实现灵活的界面组合和适配不同屏幕大小的需求。本文将探讨如何同时在 Activity 中显示多个 Fragment,并提供代码示例和关系图。

什么是 Fragment?

Fragment 是一个独立的 UI 组件,可以在活动中嵌套使用。它具有自己的生命周期,可以接收输入事件并展示自己的布局。使用 Fragment,我们可以更好地管理不同的界面模块,从而提高应用的可维护性和可重用性。

建立多个 Fragment 的布局

为了让多个 Fragment 同时显示,我们需要设计一个适合的布局。通常情况下,我们可以使用 FragmentContainerView 或者 FrameLayout 来承载 Fragment。

以下是一个简单的布局示例:

<!-- res/layout/activity_main.xml -->
<LinearLayout
    xmlns:android="
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <FragmentContainerView
        android:id="@+id/fragment_container_1"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1"/>

    <FragmentContainerView
        android:id="@+id/fragment_container_2"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1"/>
        
</LinearLayout>

在上述布局中,我们定义了两个 FragmentContainerView,它们将用于承载不同的 Fragment。

创建 Fragment

接下来,我们将创建两个简单的 Fragment。每个 Fragment 只包含一个 TextView,以便我们能够区分它们。

Fragment 1

// MyFragment1.java
public class MyFragment1 extends Fragment {

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

Fragment 2

// MyFragment2.java
public class MyFragment2 extends Fragment {

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

创建两个Fragment的布局:

<!-- res/layout/fragment_layout_1.xml -->
<LinearLayout xmlns:android="
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="这是第一个 Fragment"/>

</LinearLayout>
<!-- res/layout/fragment_layout_2.xml -->
<LinearLayout xmlns:android="
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="这是第二个 Fragment"/>

</LinearLayout>

在 Activity 中管理 Fragment

现在,我们需要在 Activity 中加载这两个 Fragment。我们将在 onCreate 方法中进行加载操作。

// MainActivity.java
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 加载 Fragment 1
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container_1, new MyFragment1())
                .commit();
            
            // 加载 Fragment 2
            getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container_2, new MyFragment2())
                .commit();
        }
    }
}

在上述代码中,我们使用 getSupportFragmentManager().beginTransaction() 方法来添加 Fragment 到指定的容器中。

系统架构关系图

以下是一个简单的关系图,展示了 Activity 和 Fragment 之间的关系。

erDiagram
    ACTIVITY ||--o{ FRAGMENT : contains
    FRAGMENT {
        string layout
        string lifecycle
    }
    ACTIVITY {
        string onCreate()
        string setContentView()
    }

总结

通过使用 Fragment,我们可以有效地在一个 Activity 中显示多个 UI 组件。在本文中,我们通过简单的实例展示了如何加载多个 Fragment,同时确保它们能够在不同的布局中独立显示。使用 Fragment 让我们的应用更加灵活、可维护,为开发者提供了更大的空间去实现各种复杂的 UI 逻辑。

希望这篇文章能帮助你更好地理解 Android 中 Fragment 的使用,掌握多个 Fragment 同时显示的基本方法。