Middle
Jak zorganizovat interakci mezi Activity a fragmentem?
sobes.tech AI
Odpověď od AI
Interakce mezi aktivitou a fragmentem v Androidu může být organizována několika způsoby:
- Pomocí rozhraní. Fragment deklaruje rozhraní s metodami zpětného volání, které implementuje aktivita. Fragment volá tyto metody k předání dat nebo událostí 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) {
// Zpracování dat z fragmentu
}
}
- Použití ViewModel s životním cyklem aktivity. Sdílený ViewModel umožňuje aktivitě a fragmentu vyměňovat si data přes LiveData.
class SharedViewModel : ViewModel() {
val data = MutableLiveData<String>()
}
// V aktivitě a fragmentu
val model = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)
// Fragment aktualizuje data
model.data.value = "Nová hodnota"
// Aktivita sleduje změny
model.data.observe(this) { value ->
// Zpracování hodnoty
}
-
Použití EventBus (například Otto, EventBus). — vzor publikace-odběru pro výměnu událostí.
-
Předávání argumentů přes Bundle při vytváření fragmentu. — pro předání dat z aktivity do fragmentu.
Volba metody závisí na úkolu a architektuře aplikace.