Fragment 에서 데이터를 주고받는 방법

2023. 7. 26. 11:08개발/Android

CommunicatorFragment Interface 활용

abstract class CommunicatorFragment : Fragment() {
    abstract fun processReceivedData(key: String, value: Any) // 보내는쪽
    abstract fun registerDataCallback(callback: (key: String, value: Any) // 받는쪽
 -> Unit)
}

fragment A

package com.example.moduleA
import com.example.utility.CommunicatorFragment

...

class FragmentA : CommunicatorFragment(){

  private lateinit var dataCallback: (key: String, value: Any) -> Unit

  override fun processReceivedData(key: String, value: Any) {
    // do something with received Data  
  }


  override fun registerDataCallback(callback: (key: String, value: Any) -> Unit) {
    dataCallback = callback
  }

    ...

    // Invoke the callback function when ready
    // For example, on some UI event like onClick
    dataCallback.invoke(key, value)


}

fragment B

package com.example.moduleB
import com.example.utility.CommunicatorFragment

...

class FragmentB : CommunicatorFragment(){

  private lateinit var dataCallback: (key: String, value: Any) -> Unit

  override fun processReceivedData(key: String, value: Any) {
    // do something with received Data  
  }

  override fun registerDataCallback(callback: (key: String, value: Any) -> Unit) {
     dataCallback = callback
   }


...
}

Send

fragmentA.processReceivedData(key, value)

Receive

fragmentB.registerDataCallback { key, value ->
  //do something with the data
}

Sum

ackage com.example.moduleC
import com.example.moduleA.FragmentA
import com.example.moduleB.FragmentB

...

class MainActivity : AppCompatActivity() {

private lateinit var fragmentA : FragmentA
private lateinit var fragmentB : FragmentB
  ...

  //Example one - Send data Directly 
  fragmentA.processReceivedData(key, value)

  ...
  
  //Example two - recive data from fragmentB 
  fragmentB.registerDataCallback { key, value ->
    //do something with the data
   }

  ...

  //Example three - recive data from one fragment and pass to another Directly
  fragmentA.registerDataCallback { key, value ->
    //pass the recived data to fragmentB
    fragmentB.processReceivedData(key, value)
   }
  
  ...

}

Uploaded by N2T

'개발 > Android' 카테고리의 다른 글

Android Macrobenchmark  (0) 2023.07.26
Baseline Profiles  (0) 2023.07.26
Android Jetpack security  (0) 2023.07.26
Architecture guide - suggested by Google  (0) 2023.07.26
딥링크 BASIC  (0) 2023.07.26