Middle
Ako zorganizovať interakciu medzi Activity a fragmentom?
sobes.tech AI
Odpoveď od AI
Interakcia medzi aktivitou a fragmentom v Androidu môže byť organizovaná niekoľkými spôsobmi:
- Pomocou rozhraní. Fragment deklaruje rozhranie s metódami spätného volania, ktoré implementuje aktivita. Fragment volá tieto metódy na odovzdanie údajov alebo udalostí do aktivity.
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) {
// Spracovanie údajov z fragmentu
}
}
- Použitie ViewModel s životným cyklom aktivity. Zdieľaný ViewModel umožňuje aktivite a fragmentu vymieňať si údaje cez LiveData.
class SharedViewModel : ViewModel() {
val data = MutableLiveData<String>()
}
// V aktivite a fragmente
val model = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)
// Fragment aktualizuje údaje
model.data.value = "Nová hodnota"
// Aktivita sleduje zmeny
model.data.observe(this) { value ->
// Spracovanie hodnoty
}
-
Použitie EventBus (napríklad, Otto, EventBus). — vzor publikácie-odberu na výmenu udalostí.
-
Prenos argumentov cez Bundle pri vytváraní fragmentu. — na odovzdanie údajov z aktivity do fragmentu.
Výber metódy závisí od úlohy a architektúry aplikácie.