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