как сделать функцию проще - PullRequest
0 голосов
/ 11 июля 2020

Я пытался следовать принципам solid и хочу улучшить свой код. Поэтому я хочу отделить функцию, которая может не использоваться в некоторых проблемах.

это код, который я уже отделил, но все еще избыточен

private lateinit var dialogView : View
    private lateinit var b : AlertDialog    
override fun modalDialog(
        view:Int,
        listener: bodyModalDialog, submitButtonModalDialog: submitButtonModalDialog,
        btnSubmit:Int,
        btnCancel:Int) {
        val dialogBuilder = AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Light_Dialog_Alert)
        val inflater =  this.layoutInflater
        dialogView = inflater.inflate(view, null)
        dialogBuilder.setView(dialogView)
        dialogBuilder.setCancelable(false)
        var uiSubmitButton  = dialogView.findViewById<View>(btnSubmit)
        var uiCancelButton  = dialogView.findViewById<View>(btnCancel)
        listener.bodyDialog(dialogView)
        uiSubmitButton.setOnClickListener {
            submitButtonModalDialog.submitButton(dialogView)
            b.cancel()
        }
        uiCancelButton.setOnClickListener {
            b.cancel()
        }
        b = dialogBuilder.create()
        b.window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        b.show()
    }

    override fun modalDialogNoBody(
        view:Int,
        listener: submitButtonModalDialog,
        btnSubmit:Int,
        btnCancel:Int) {
        val dialogBuilder = AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Light_Dialog_Alert)
        val inflater =  this.layoutInflater
        dialogView = inflater.inflate(view, null)
        dialogBuilder.setView(dialogView)
        dialogBuilder.setCancelable(false)
        var uiSubmitButton  = dialogView.findViewById<View>(btnSubmit)
        var uiCancelButton  = dialogView.findViewById<View>(btnCancel)
        uiSubmitButton.setOnClickListener {
            listener.submitButton(dialogView)
            b.cancel()
        }
        uiCancelButton.setOnClickListener {
            b.cancel()
        }
        b = dialogBuilder.create()
        b.window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        b.show()
    }

из того кода, который я пытался отделить когда проблема нужна телу, а некоторым нет. Так что, если я позволю им получить доступ к телу, оно будет просто пустым, поэтому я расстанусь вот так. Но код избыточен, потому что он пишет один и тот же код с одним из них, нет тела. Поэтому я попытался сделать так, чтобы один из них просто взял другой код и добавил процедуру тела, но я не знаю, как это сделать. Я попытался создать объект, поэтому, когда он вызвал true, это означает, что тела нет, а если false, есть тело, подобное этому коду

object Modal{
    fun isNoBody(view:Int,
                 listener: submitButtonModalDialog,
                 btnSubmit:Int,
                 btnCancel:Int):Boolean{
            val dialogBuilder = AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Light_Dialog_Alert)
            val inflater =  this.layoutInflater
            dialogView = inflater.inflate(view, null)
            dialogBuilder.setView(dialogView)
            dialogBuilder.setCancelable(false)
            var uiSubmitButton  = dialogView.findViewById<View>(btnSubmit)
            var uiCancelButton  = dialogView.findViewById<View>(btnCancel)
            uiSubmitButton.setOnClickListener {
                listener.submitButton(dialogView)
                b.cancel()
            }
            uiCancelButton.setOnClickListener {
                b.cancel()
            }
            b = dialogBuilder.create()
            b.window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
            b.show()
        return true
    }
}

, но это не сработает, потому что AlertDialog и View могут не назовёшься туда. даже если я изменю их на publi c. помогите пожалуйста

1 Ответ

0 голосов
/ 14 июля 2020

Я получил свой ответ. Я делаю кнопку и тело с двумя разными интерфейсами. и потому что, если вы хотите использовать тело, вам нужна кнопка автоматически, поэтому я просто вызываю ее, когда это нужно, только вот так

override fun modalDialog(view:Int,
                         listener: SubmitButtonModalDialog,
                         btnSubmit:Int,
                         btnCancel:Int) {
    val dialogBuilder = AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Light_Dialog_Alert)
    val inflater =  this.layoutInflater
    dialogView = inflater.inflate(view, null)
    dialogBuilder.setView(dialogView)
    dialogBuilder.setCancelable(false)
    var uiSubmitButton  = dialogView.findViewById<View>(btnSubmit)
    var uiCancelButton  = dialogView.findViewById<View>(btnCancel)
    uiSubmitButton.setOnClickListener {
        listener.submitButton(dialogView)
        b.cancel()
    }
    uiCancelButton.setOnClickListener {
        b.cancel()
    }
    b = dialogBuilder.create()
    b.window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
    b.show()
}

override fun modalDialogBody(listener: BodyModalDialog) {
    listener.bodyDialog(dialogView)
}
...