How to Communicate Between Fragments in Android? - GeeksforGeeks

17 Jan, 2022
Now a day most apps have so many features so for that they use multiple fragments in a single app and communication is one of the important parts of apps for sharing data from one fragment to another because two fragments can’t communicate directly. A Fragment represents a portion of any user interface. There can be a number of fragments within one activity. They have their own life cycle.
There are multiple ways in which we can communicate within apps:
We can communicate within fragments using the ViewModel.
We can also communicate between fragments using Interface.
In this article, we are going to explain communicating within between fragments using the Interface using Kotlin.
Step 1: Create a New Project in your android studio 
To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Note that select Kotlin as the programming language.
Step 2: Create two blank fragments 
Navigate to your Project file where MainActivity.kt exists. Right-click on that folder and click on the new package and name it fragments. Now inside this newly created folder create two blank fragments and name them Fragment1 & Fragment2.
Step 3: Working with XML files
Navigate to the app > res > layout > fragment1.xml and add the below code to that file. Below is the code for the fragment1.xml file. 
XML
<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".fragments.Fragment1">     <!-- Text View for showing Fragment1 text -->    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Fragment 1"        android:textSize="40sp"        android:layout_centerHorizontal="true"        android:gravity="center"        android:layout_marginTop="20dp"        android:textColor="@color/black"/>       <!-- Edit Text for taking user input -->    <EditText        android:id="@+id/messageInput"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Enter text to Pass"        android:layout_marginTop="200dp"        android:gravity="center"        android:layout_marginLeft="30dp"        android:layout_marginRight="30dp"        android:textSize="30sp"/>      <!-- Button for submit user response -->    <Button        android:id="@+id/sendBtn"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_below="@+id/etText"        android:text="Submit"        android:backgroundTint="#0F9D58"        android:textSize="20sp"        android:textAllCaps="false"        android:layout_marginLeft="30dp"        android:layout_marginRight="30dp"        android:layout_marginTop="20dp" /> </RelativeLayout>
Navigate to the app > res > layout > fragment2.xml and add the below code to that file. Below is the code for the fragment2.xml file. 
XML
<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".fragments.Fragment2">     <!-- Text View for showing Fragment2 text -->    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Fragment 2"        android:textSize="40sp"        android:layout_centerHorizontal="true"        android:gravity="center"        android:layout_marginTop="20dp"        android:textColor="@color/black"/>     <!-- Frame Layout which will replaced by data from Fragment1 -->    <FrameLayout        android:id="@+id/frameLayout"        android:layout_width="match_parent"        android:layout_height="wrap_content">         <TextView            android:id="@+id/displayMessage"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:text="Text"            android:textSize="30sp"            android:layout_centerHorizontal="true"            android:gravity="center"            android:layout_marginTop="300dp"            android:textColor="@color/black"/>     </FrameLayout> </RelativeLayout>
Step 4: Create Interface
Again navigate to your Project folder where MainActivity.kt exists and right-click on that folder -> new -> Kotlin class/file -> Interface them name it as Communicator.
Kotlin
package com.mrtechy.gfg interface Communicator {    fun passData(ediTextInput:String)}
Step 5: Working With the MainActivity.kt 
Kotlin
package com.mrtechy.gfg import androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport com.mrtechy.gfg.fragments.Fragment1import com.mrtechy.gfg.fragments.Fragment2 class MainActivity : AppCompatActivity(), Communicator {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)         // created instance of Fragment1        val fragment1 = Fragment1()         // Frame manager called to replace Fragment2 frame layout with Fragment1 data        supportFragmentManager.beginTransaction().replace(R.id.frameLayout,fragment1).commit()    }     // Override function which we    // have created in our interface    override fun passData(ediTextInput: String) {        val bundle = Bundle()        bundle.putString("message", ediTextInput)         val transaction = this.supportFragmentManager.beginTransaction()                 // Created instance of fragment2        val fragment2 = Fragment2()         fragment2.arguments = bundle        transaction.replace(R.id.frameLayout,fragment2)        transaction.commit()    }}
Step 6: Working With Fragment1 & Fragment file
Below is the code for the Fragment1.kt and Fragment2.kt files respectively. 
Kotlin
Kotlin
package com.mrtechy.gfg.fragments import android.os.Bundleimport androidx.fragment.app.Fragmentimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport android.widget.Buttonimport android.widget.EditTextimport com.mrtechy.gfg.Communicatorimport com.mrtechy.gfg.R class Fragment1 : Fragment() {     private lateinit var communicator: Communicator     override fun onCreateView(        inflater: LayoutInflater, container: ViewGroup?,        savedInstanceState: Bundle?    ): View? {               // Inflate the layout for this fragment        val view = inflater.inflate(R.layout.fragment_1, container, false)         communicator = activity as Communicator               // there are button and edittext id which we have saved        val button:Button = view.findViewById(R.id.sendBtn)        val textMessage:EditText = view.findViewById(R.id.messageInput)         // pass data to our interface while        // button clicked using setOnClickListener        button.setOnClickListener {            communicator.passData(textMessage.text.toString())        }         return view     } }
package com.mrtechy.gfg.fragments import android.os.Bundleimport androidx.fragment.app.Fragmentimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport android.widget.TextViewimport com.mrtechy.gfg.R class Fragment2 : Fragment() {     // initialised a empty string variable    var displayMessage:String? =""     override fun onCreateView(        inflater: LayoutInflater, container: ViewGroup?,        savedInstanceState: Bundle?    ): View? {               // Inflate the layout for this fragment        val view = inflater.inflate(R.layout.fragment_2, container, false)        val displayM:TextView = view.findViewById(R.id.displayMessage)         // get text from interface and send        // to textView present in Fragment2        displayMessage = arguments?.getString("message")        displayM.text = displayMessage        return view    } }
Output:
Output
adnanirshad158
saurabh1990aror
Picked
Android
Kotlin
Android
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Retrofit with Kotlin Coroutine in Android
Android Listview in Java with Example
Flutter - Custom Bottom Navigation Bar
How to Read Data from SQLite Database in Android?
How to Change the Background Color After Clicking the Button in Android?
Android UI Layouts
Kotlin Array
Retrofit with Kotlin Coroutine in Android
MVP (Model View Presenter) Architecture Pattern in Android with Example
Kotlin Setters and Getters