Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Dynamic Fragments in Android Development

Introduction

Dynamic Fragments allow you to add, replace, and remove fragments in an activity during runtime. This feature is especially useful for creating flexible and responsive UIs in Android applications. In this tutorial, we will cover the basics of dynamic fragments, how to manage fragment transactions, and provide examples to help you understand the concept better.

Setting Up the Environment

Before we start, ensure that you have Android Studio installed and a new Android project created. Make sure to select an Empty Activity template when creating the project.

Creating Fragment Layouts

First, create two fragment layouts in the res/layout directory. Each layout will represent a different fragment.

fragment_one.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Fragment One"
        android:textSize="24sp"/>

</LinearLayout>
                

fragment_two.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Fragment Two"
        android:textSize="24sp"/>

</LinearLayout>
                

Creating Fragment Classes

Next, create two fragment classes in the java directory. Each class will extend Fragment and inflate the corresponding layout.

FragmentOne.java

package com.example.dynamicfragments;

import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentOne extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_one, container, false);
    }
}
                

FragmentTwo.java

package com.example.dynamicfragments;

import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentTwo extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_two, container, false);
    }
}
                

Implementing Fragment Transactions

Now that we have our fragments ready, we can manage fragment transactions in the main activity. We will add buttons to switch between fragments dynamically.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <Button
        android:id="@+id/btnFragmentOne"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Load Fragment One"/>

    <Button
        android:id="@+id/btnFragmentTwo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Load Fragment Two"/>

    <FrameLayout
        android:id="@+id/fragmentContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="20dp"/>

</LinearLayout>
                

MainActivity.java

package com.example.dynamicfragments;

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button btnFragmentOne, btnFragmentTwo;

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

        btnFragmentOne = findViewById(R.id.btnFragmentOne);
        btnFragmentTwo = findViewById(R.id.btnFragmentTwo);

        btnFragmentOne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                loadFragment(new FragmentOne());
            }
        });

        btnFragmentTwo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                loadFragment(new FragmentTwo());
            }
        });
    }

    private void loadFragment(Fragment fragment) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.fragmentContainer, fragment);
        fragmentTransaction.commit();
    }
}
                

Conclusion

In this tutorial, we covered the basics of dynamic fragments in Android development. We learned how to create fragment layouts and classes, and how to manage fragment transactions in an activity. Dynamic fragments provide a powerful way to create flexible and responsive UIs. By understanding and utilizing fragments, you can enhance the user experience of your Android applications significantly.