Middle
Jak zorganizować interakcję między Activity a fragmentem?
sobes.tech AI
Odpowiedź od AI
Interakcja między Activity a fragmentem w Androidzie może być zorganizowana na kilka sposobów:
- Przez interfejsy. Fragment deklaruje interfejs z metodami zwrotnymi, które implementuje Activity. Fragment wywołuje te metody, aby przekazać dane lub zdarzenia do Activity.
class MyFragment : Fragment() {
interface OnDataPass {
fun onDataPass(data: String)
}
private lateinit var dataPasser: OnDataPass
override fun onAttach(context: Context) {
super.onAttach(context)
dataPasser = context as OnDataPass
}
fun passData(data: String) {
dataPasser.onDataPass(data)
}
}
class MyActivity : AppCompatActivity(), MyFragment.OnDataPass {
override fun onDataPass(data: String) {
// Obsługa danych z fragmentu
}
}
- Użycie ViewModel z cyklem życia Activity. Wspólny ViewModel pozwala Activity i fragmentowi wymieniać dane przez LiveData.
class SharedViewModel : ViewModel() {
val data = MutableLiveData<String>()
}
// W Activity i fragmencie
val model = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)
// Fragment aktualizuje dane
model.data.value = "Nowa wartość"
// Activity obserwuje zmiany
model.data.observe(this) { value ->
// Obsługa wartości
}
-
Użycie EventBus (np. Otto, EventBus) — wzorzec publikacji-subskrypcji do wymiany zdarzeń.
-
Przekazywanie argumentów przez Bundle podczas tworzenia fragmentu — do przekazywania danych z Activity do fragmentu.
Wybór metody zależy od zadania i architektury aplikacji.