How to Send Data From Activity to Fragment in Android?

15 Feb, 2022
Prerequisites:
Introduction to Activities in Android
Introduction to Fragments in Android
In Android, a fragment is a portion of the user interface that can be used again and again. Fragment manages its own layout and has its own life cycle. Since fragment is a small portion of the bigger user interface, it can only be initialized inside an activity or another fragment. So if we wish to display any type of resources, such as a string, or an image inside the fragment, we will need to declare them in the activity and then pass it to the fragment. So in this article, we will show you how you can pass data from an Activity to the Fragment.
Step 1: Create a New Project in Android Studio
To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. We demonstrated the application in Kotlin, so make sure you select Kotlin as the primary language while creating a New Project.
Step 2: Create a custom fragment layout (my_custom_fragment.xml) in the layout folder
We shall pass a string to the fragment. To display this string, we implemented a TextView.
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="wrap_content"    android:orientation="vertical">      <!-- TextVIew to display the passed text -->    <TextView        android:id="@+id/fragmentTextView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:textColor="@color/white"        android:textSize="50sp"        android:background="#0f9d58"/>  </LinearLayout>
Step 3: Add EditText, Button, and Frame in the layout file (activity_main.xml)
Refer to the comments inside the code for better understanding.
XML
<?xml version="1.0" encoding="utf-8"?><RelativeLayout    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">      <!-- We will type text in this EditText -->    <EditText        android:id="@+id/editText"        android:layout_width="match_parent"        android:layout_height="50sp"/>      <!-- Click this button to pass text          in EditText to the Fragment -->    <Button        android:id="@+id/button"        android:layout_below="@+id/editText"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:text="Pass"/>      <!-- Text will be displayed in a          TextView in this Fragment -->    <FrameLayout        android:id="@+id/frameLayout"        android:layout_below="@+id/button"        android:layout_width="match_parent"        android:layout_height="match_parent"/>  </RelativeLayout>
Step 4: Create a class for the custom fragment (MyCustomFragment.kt)
This is a custom fragment class to inflate the custom layout in the frame layout present in the main activity.
Kotlin
import android.os.Bundleimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport android.widget.TextViewimport androidx.fragment.app.Fragment  class MyCustomFragment: Fragment() {      // Declaring TextView from the custom fragment layout    private lateinit var myTextView: TextView      // Override function when the view is being created    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {          // Inflates the custom fragment layout        val view: View = inflater.inflate(R.layout.my_custom_fragment, container, false)          // Finds the TextView in the custom fragment        myTextView = view.findViewById<View>(R.id.fragmentTextView) as TextView          // Gets the data from the passed bundle        val bundle = arguments        val message = bundle!!.getString("mText")          // Sets the derived data (type String) in the TextView        myTextView.text = message          return view    }}
Step 5: Initialize MyCustomFragment class and pass the values from the EditText (MainActivity.kt)
In this program, the EditText value (input string) is fetched on a button click. The custom fragment class is initialized and the input string is passed to get desired results. Please refer to the comments inside the code below for a better understanding.
Kotlin
import androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.widget.Buttonimport android.widget.EditText  class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)          // Declaring and initializing the EditText and Button from the layout        val mEditText = findViewById<EditText>(R.id.editText)        val mButton = findViewById<Button>(R.id.button)          // Declaring fragment manager from making data        // transactions using the custom fragment        val mFragmentManager = supportFragmentManager        val mFragmentTransaction = mFragmentManager.beginTransaction()        val mFragment = MyCustomFragment()          // On button click, a bundle is initialized and the         // text from the EditText is passed in the custom        // fragment using this bundle        mButton.setOnClickListener {            val mBundle = Bundle()            mBundle.putString("mText",mEditText.text.toString())            mFragment.arguments = mBundle            mFragmentTransaction.add(R.id.frameLayout, mFragment).commit()        }    }}
Output:
We can see that when the text is typed in the EditText and the button is clicked, the same text is displayed in our custom fragment.
simmytarika5
Android
Kotlin
Android
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
How to Add Views Dynamically and Store Data in Arraylist in Android?
Android SDK and it's Components
Flutter - Custom Bottom Navigation Bar
How to Communicate Between Fragments in Android?
Retrofit with Kotlin Coroutine in Android
How to Add Views Dynamically and Store Data in Arraylist in Android?
Android UI Layouts
Kotlin Array
How to Communicate Between Fragments in Android?
Retrofit with Kotlin Coroutine in Android