Android 从另一个活动调用dialog.Disclose
我试图从另一个活动(MainActivity)中删除一个自定义对话框,我将其扩展到BaseActivity类 我尝试在checkConnectivity()函数中调用dialog.dismise()方法,如下所示: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
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()
}
我复制并粘贴了您的全部代码,并在模拟器上进行了尝试。有连接时显示已连接,没有连接时显示错误对话框。可能是硬件中有错误?我复制并粘贴了您的全部代码,并在模拟器上进行了试验。有连接时显示已连接,并显示错误对话框当没有连接时。可能是硬件出错了?