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

  1. 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
    }
}
  1. 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
}
  1. Použití EventBus (například Otto, EventBus). — vzor publikace-odběru pro výměnu událostí.

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