Para todos os desenvolvedores do Kotlin por aí:
Aqui está a solução proposta do Android Studio para enviar dados ao seu fragmento (= quando você cria um fragmento em branco com Arquivo -> Novo -> Fragmento -> Fragmento (em branco) e verifica "incluir métodos de fábrica de fragmentos").
Coloque isso no seu fragmento:
class MyFragment: Fragment {
...
companion object {
@JvmStatic
fun newInstance(isMyBoolean: Boolean) = MyFragment().apply {
arguments = Bundle().apply {
putBoolean("REPLACE WITH A STRING CONSTANT", isMyBoolean)
}
}
}
}
.apply
é um bom truque para definir dados quando um objeto é criado ou como eles afirmam aqui :
Chama a função especificada [bloco] com this
valor como seu receptor e retorna this
valor.
Em sua atividade ou fragmento, faça:
val fragment = MyFragment.newInstance(false)
... // transaction stuff happening here
e leia os argumentos em seu fragmento, como:
private var isMyBoolean = false
override fun onAttach(context: Context?) {
super.onAttach(context)
arguments?.getBoolean("REPLACE WITH A STRING CONSTANT")?.let {
isMyBoolean = it
}
}
Para "enviar" os dados de volta à sua Atividade , basta definir uma função na sua Atividade e faça o seguinte no seu Fragmento:
(activity as? YourActivityClass)?.callYourFunctionLikeThis(date) // your function will not be called if your Activity is null or is a different Class
Aproveite a magia do Kotlin!