如何从 Java class 打开用 Kotlin class 编写的 DialogFragment

How to open a DialogFragment written in Kotlin class from a Java class

我创建了WaterQualityChecksDialogFragment,如有不妥请指正

WaterQualityChecksDialogFragment.kt

class WaterQualityChecksDialogFragment : DialogFragment() {

@Inject
private lateinit var app: App

fun newTargetInstance(): WaterQualityChecksDialogFragment {
    val fragment = WaterQualityChecksDialogFragment()
    return fragment
}

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    app!!.bus.post(ScreenDimEvent(false))

    val builder = AlertDialog.Builder(activity!!.applicationContext)

    // Get the layout inflater
    val inflater = activity!!.layoutInflater

    @SuppressLint("InflateParams")
    val inflatedView = inflater.inflate(R.layout.dialog_water_quality_cheks, null)

    builder
            .setView(inflatedView)
            .setCancelable(false)
            /*
             * setPositiveButton and setNeutralButton are also set (and overridden) in {@link #onStart}
             * to stop Android automatically closing the dialog on click
             */
            .setPositiveButton(R.string.fuel_order_signature_dialog_save) { dialog, id ->

            }
            .setNeutralButton(R.string.fuel_order_signature_dialog_clear) { dialog, id ->

            }


    val dialog = builder.create()

    // Stop touch events outside the dialog from cancelling/dismissing
    dialog.setCanceledOnTouchOutside(false)

    return dialog
}

interface WaterQCChecksDialogListener {
    fun onDialogPositiveClick(dialog: WaterQualityChecksDialogFragment)

    fun onDialogNegativeClick(dialog: WaterQualityChecksDialogFragment)
}
}

ServiceOrderDialogHelper.java

public void showWaterQCChecksDioalog(){
    //Cannot call newTargetInstance() method.
    waterQualityChecksDialogFragment = WaterQualityChecksDialogFragment.newTargetInstance()
}

newTargetInstance() 放在 companion object 中,使 staticjava

companion object {
    fun newTargetInstance(): WaterQualityChecksDialogFragment {
        val fragment = WaterQualityChecksDialogFragment()
        return fragment
    }
}

然后从 java 调用,如下所示:

WaterQualityChecksDialogFragment.Companion.newTargetInstance();

请检查此代码,它可能对您有所帮助

 class DialogClassSample : DialogFragment() {

companion object {
    fun newInstance(): DialogClassSample {
        val dialog = DialogClassSample()
        return dialog
    }
}



override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    isCancelable = false
    return inflater.inflate(R.layout.view, container, false)
}


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

    setListener()
}

fun setListener() {
    button.setOnClickListener({
        dismiss()
    })
}

override fun onResume() {
    super.onResume()
    val window = dialog?.window
    val size = Point()
    val display = window?.windowManager?.defaultDisplay
    display?.getSize(size)
    val width = size.x
    window?.setLayout((width * 0.85).toInt(),    WindowManager.LayoutParams.WRAP_CONTENT)
    window?.setGravity(Gravity.CENTER)
  }
 }

然后从您的class

打电话
   val dialog = DialogClassSample.newInstance()//show dialog description according to user type
        dialog.show(activity?.supportFragmentManager?.beginTransaction(), DialogClassSample::class.java.name)

在简历中我们动态设置了对话框大小,因为在一些更大尺寸的对话框中它看起来不太好所以你可以根据你的要求使用