Eu tenho um fragmento que hospeda um fragmento de diálogo que contém campos EditText. Quando um botão é clicado no fragmento de diálogo, os dados dos campos EditText devem ser passados para o host.
É com isso que venho trabalhando:
O fragmento hospedeiro
class MeasurementsFragment : androidx.fragment.app.Fragment(), RecyclerClickListener {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
/*Initialize Views*/
display = binding.measurementsFragmentTestingTextView
addMeasurementFab = binding.clientMeasurementFragmentAddMeasurementFab
addMeasurementFab.setOnClickListener {
AddMeasurementDialogFragment().show(childFragmentManager, "Dialog tag")
}
override fun onItemClicked1(dressMeasurementModel: DressMeasurementModel) {
EditMeasurementDialogFragment().show(childFragmentManager, "Dialog tag")
}
override fun onItemClicked2(dressMeasurementModel: DressMeasurementModel) {
Toast.makeText(requireContext(), "Position 2 was clicked", Toast.LENGTH_SHORT).show()
}
}
O fragmento de diálogo
class AddMeasurementDialogFragment : DialogFragment(){
private var _binding: AddMeasurementDialogFragmentBinding? = null
private lateinit var addMeasurementButton: Button
// This property is only valid between onCreateView and onDestroyView.
private val binding get() = _binding!!
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
addMeasurementButton = binding.addMeasurementFragmentAddMeasurementButton
addMeasurementButton.setOnClickListener {
val measurementName = binding.addAddressFragmentMeasurementNameEditText.text.toString()
val measurement = binding.addMeasurementFragmentAddMeasureEditText.text.toString().toBigDecimal()
val action = AddMeasurementDialogFragmentDirections.actionAddMeasurementFragmentToMeasurementsFragment(
DressMeasurementModel(measurementName, measurement)
)
findNavController().navigate(action)
}
}
interface DialogFragmentInterface {
fun passDataMethod(data:DressMeasurementModel)
}
}
Não é recomendado usar ouvinte para comunicação entre Fragments e Activities. A abordagem mais recente é usar a API FragmentResult
Defina o resultado quando o usuário clicar em seu fragmento filho:
button.setOnClickListener {
val editTextString = "..." // Get string from EditText
// Use the Kotlin extension in the fragment-ktx artifact
setFragmentResult("keyClicked", bundleOf("bundleKey" to editTextString))
}
Em seu fragmento pai:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Set the listener to get notified when clicked
// And retrieve the EditText data
childFragmentManager.setFragmentResultListener("keyClicked") { key, bundle ->
val editTextString = bundle.getString("bundleKey")
// Do something with the string
}
}
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras