Sobes.tech
Middle

Как да организираме взаимодействието между Activity и фрагмент?

sobes.tech AI

Отговор от AI

Взаимодействието между Activity и фрагмент в Android може да бъде организирано по няколко начина:

  1. Чрез интерфейси. Фрагментът обявява интерфейс с методи за обратно извикване, които реализира Activity. Фрагментът извиква тези методи за предаване на данни или събития към 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) {
        // Обработка на данните от фрагмента
    }
}
  1. Използване на ViewModel с жизнения цикъл на Activity. Общ ViewModel позволява на Activity и фрагмента да обменят данни чрез LiveData.
class SharedViewModel : ViewModel() {
    val data = MutableLiveData<String>()
}

// В Activity и фрагмент
val model = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)

// Фрагментът актуализира данните
model.data.value = "Нова стойност"

// Activity наблюдава промените
model.data.observe(this) { value ->
    // Обработка на стойността
}
  1. Използване на EventBus (например, Otto, EventBus) — модел на публикуване-абониране за обмен на събития.

  2. Прехвърляне на аргументи чрез Bundle при създаване на фрагмента — за предаване на данни от Activity към фрагмента.

Изборът на метод зависи от задачата и архитектурата на приложението.