Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从另一个活动调用dialog.Disclose_Android_Kotlin_Android Alertdialog - Fatal编程技术网

Android 从另一个活动调用dialog.Disclose

Android 从另一个活动调用dialog.Disclose,android,kotlin,android-alertdialog,Android,Kotlin,Android Alertdialog,我试图从另一个活动(MainActivity)中删除一个自定义对话框,我将其扩展到BaseActivity类 我尝试在checkConnectivity()函数中调用dialog.dismise()方法,如下所示: fun checkConnectivity() { val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val activeNetwork

我试图从另一个活动(MainActivity)中删除一个自定义对话框,我将其扩展到BaseActivity类

我尝试在checkConnectivity()函数中调用dialog.dismise()方法,如下所示:

   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属性对话框尚未初始化”

因此,我尝试传递一个如下所示的布尔表达式,如果为true,则应显示对话框,如果为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()
    }
}

我建议使用一个可为空的对话框,而不是lateinit-

开放类BaseActivity:AppCompatActivity(){
var TAG=this.toString()
变量对话框:AlertDialog?=null
然后像这样修改警报功能-

fun警报(图像:可绘制,消息:字符串,开启:布尔值){
如果(!on){
对话框?.discover()
dialog=null
}
val builder=AlertDialog.builder(此)
val view=LAYOUTING FLATER.充气(R.layout.alert\U layout,null)
builder.setView(视图)
builder.setCancelable(false)
view.img.setImageDrawable(图像)
view.mssg.text=消息
dialog=builder.create()
对话框?.window?.requestFeature(window.FEATURE\u NO\u TITLE)
dialog?.window?.setBackgroundDrawable(可彩色绘制(彩色.透明))
对话框?.show()
}

我建议使用可为空的对话框,而不是lateinit-

开放类BaseActivity:AppCompatActivity(){
var TAG=this.toString()
变量对话框:AlertDialog?=null
然后像这样修改警报功能-

fun警报(图像:可绘制,消息:字符串,开启:布尔值){
如果(!on){
对话框?.discover()
dialog=null
}
val builder=AlertDialog.builder(此)
val view=LAYOUTING FLATER.充气(R.layout.alert\U layout,null)
builder.setView(视图)
builder.setCancelable(false)
view.img.setImageDrawable(图像)
view.mssg.text=消息
dialog=builder.create()
对话框?.window?.requestFeature(window.FEATURE\u NO\u TITLE)
dialog?.window?.setBackgroundDrawable(可彩色绘制(彩色.透明))
对话框?.show()
}

我复制并粘贴了您的全部代码,并在模拟器上进行了尝试。有连接时显示已连接,没有连接时显示错误对话框。可能是硬件中有错误?我复制并粘贴了您的全部代码,并在模拟器上进行了试验。有连接时显示已连接,并显示错误对话框当没有连接时。可能是硬件出错了?