Kotlin: targetfragment is deprecated in DialogFragment. How to replace it?

Viewed 112

My DialogFragment

private lateinit var listener: OnItemClickDialogListener

My interface

interface OnItemClickDialogListener{
  fun onItemClickDialog(sortDesc: Boolean){
}

And my problem

listener = try {
          targetFragment as OnItemClickDialogListener
        }catch (e: TypeCastException){
            throw TypeCastException()
        }

targetFragment is deprecated and I don't know how to fix it. I spent a lot of time find solution.

My full code:

class SortDialogFragment: DialogFragment() {

    private lateinit var listener: OnItemClickDialogListener
    private lateinit var radioGroup: RadioGroup

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val builder = AlertDialog.Builder(requireContext())
        val inflater = requireActivity().layoutInflater
        val view: View = inflater.inflate(R.layout.fragment_dialog_sort, null)

        radioGroup = view.findViewById(R.id.sort_RG)

        builder.setView(view)
            .setPositiveButton("OK") {di, i ->
                when(radioGroup.checkedRadioButtonId){
                    R.id.sort_desc_RB -> { listener.onItemClickDialog(true) }
                    R.id.sort_asc_RB -> { listener.onItemClickDialog(false) }
                }

            }
            .setNegativeButton("Cancel") {di, i -> }
        return super.onCreateDialog(savedInstanceState)
    }

    override fun onAttach(context: Context) {
        super.onAttach(context)

        listener = try {
          targetFragment as OnItemClickDialogListener
        }catch (e: TypeCastException){
            throw TypeCastException()
        }

    }
    interface OnItemClickDialogListener{
        fun onItemClickDialog(sortDesc: Boolean){
        }
    }
}
0 Answers
Related