Вызов dialog.dismiss из другого действия - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь отклонить пользовательский диалог из другого действия (MainActivity), которое я расширил до класса BaseActivity.

Я попытался вызвать метод dialog.dismiss () в функции checkConnectivity () как показано ниже:

   fun checkConnectivity() {
        val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val activeNetwork = cm.activeNetworkInfo
        val isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting
        val internetErrorImg = resources.getDrawable(R.drawable.internet) as Drawable

        if (!isConnected) {
            alert()
        } else {
            Toast.makeText(this, "Connected.", Toast.LENGTH_LONG).show()
            dialog.dismiss()
        }
    }

Но возвращается ошибка, что «диалог свойств lateinit не был инициализирован».

Поэтому я попытался передать логическое выражение, как показано ниже, если оно истинно должен показывать диалог, но если false, он должен закрывать диалог.

    fun alert(image: Drawable, message: String, on: Boolean) {
        val builder = AlertDialog.Builder(this)
        val view = layoutInflater.inflate(R.layout.alert_layout, null)
        builder.setView(view)
        builder.setCancelable(false)

        view.img.setImageDrawable(image)
        view.mssg.text = message
        dialog = builder.create()
        dialog.window?.requestFeature(Window.FEATURE_NO_TITLE)
        dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))

        if (on) {
            dialog.show()
        } else {
            dialog.dismiss()
        }
    }

И я вызвал функцию в функции checkConnectivity () следующим образом:

        if (!isConnected) {
            alert(internetErrorImg,"Error connecting to the internet", true)
        } else {
            Toast.makeText(this, "Connected.", Toast.LENGTH_LONG).show()
            alert(internetErrorImg, "null", false)
        }

Но это не так не работает и не показывает никаких ошибок. Как я могу решить эту проблему?

Это полный код для BaseActivity

open class BaseActivity : AppCompatActivity() {
    var TAG = this.toString()
    lateinit var dialog: AlertDialog

    fun checkConnectivity() {
        val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val activeNetwork = cm.activeNetworkInfo
        val isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting
        val internetErrorImg = resources.getDrawable(R.drawable.internet) as Drawable

        if (!isConnected) {
            alert(
                internetErrorImg,
                "Error connecting to the internet, check connection and try again.", true
            )
        } else {
            Toast.makeText(this, "Connected.", Toast.LENGTH_LONG).show()
            alert(internetErrorImg, "null", false)

        }
    }

    fun alert(image: Drawable, message: String, on: Boolean) {
        val builder = AlertDialog.Builder(this)
        val view = layoutInflater.inflate(R.layout.alert_layout, null)
        builder.setView(view)
        builder.setCancelable(false)

        view.img.setImageDrawable(image)
        view.mssg.text = message
        dialog = builder.create()
        dialog.window?.requestFeature(Window.FEATURE_NO_TITLE)
        dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))

        if (on) {
            dialog.show()
        } else {
            dialog.dismiss()
        }
    }

Это моя основная деятельность, в которой я расширяюсь до базового класса активности

class MainActivity : BaseActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        checkConnectivity()
    }
}

1 Ответ

0 голосов
/ 08 апреля 2020

Я бы предложил использовать диалог Nullable вместо lateinit-

open class BaseActivity : AppCompatActivity() {
    var TAG = this.toString()
    var dialog: AlertDialog? = null

, а затем изменить функцию оповещения следующим образом:

    fun alert(image: Drawable, message: String, on: Boolean) {
        if (!on) {
            dialog?.dismiss()
            dialog = null
        }

        val builder = AlertDialog.Builder(this)
        val view = layoutInflater.inflate(R.layout.alert_layout, null)
        builder.setView(view)
        builder.setCancelable(false)

        view.img.setImageDrawable(image)
        view.mssg.text = message
        dialog = builder.create()
        dialog?.window?.requestFeature(Window.FEATURE_NO_TITLE)
        dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        dialog?.show()
    }
...