Sobes.tech
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:

  1. 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
    }
}
  1. 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
}
  1. Użycie EventBus (np. Otto, EventBus) — wzorzec publikacji-subskrypcji do wymiany zdarzeń.

  2. 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.