Search code examples
androidkotlinandroid-fragmentsandroid-dialogfragment

How to can I pass data from a host fragment to dialog fragment in kotlin?


I have a RecylcerView that the view is clicked should take the user to a dialog fragment where the user will be able to edit the content of the view. Hence i need to pass the data as data class DressMeasurementModel from the host fragment to the dailog fragment.

How can i achieve this?

    // This property is only valid between onCreateView and onDestroyView.
    private val binding get() = _binding!!
    private lateinit var addMeasurementFab: FloatingActionButton
    private lateinit var display:TextView
    private lateinit var myAdapter: AddMeasurementAdapter
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        _binding = MeasurementsFragmentBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)


        val recyclerView = binding.measurementsFragmentRecyclerView
        myAdapter = AddMeasurementAdapter(currentList,this@MeasurementsFragment, this@MeasurementsFragment)
        recyclerView.adapter = myAdapter
        recyclerView.layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)
    }

    override fun onItemClicked1(dressMeasurementModel: DressMeasurementModel) {
        val data = DressMeasurementModel(dressMeasurementModel.measurementName, dressMeasurementModel.measurement)
        val bundle = bundleOf("editData" to data)
        setFragmentResult("editData_key", bundle)
        EditMeasurementDialogFragment().show(childFragmentManager, "Dialog tag")
    }
}


Solution

  • Have your Dialog class with a constructor which you want the data:

    class EditMeasurementDialogFragment(data: DressMeasurementModel)
    

    You can pass it in a constructor like below:

     val data = DressMeasurementModel(dressMeasurementModel.measurementName, dressMeasurementModel.measurement)
    EditMeasurementDialogFragment(data).show(childFragmentManager, "Dialog tag")