无法在android中使用Disclose方法关闭进度对话框
这是我的singlton类,用于自定义进度对话框,用于show对话框,我们有show方法,用于Disclose,我们有Disclose方法,我调用这个类无法在android中使用Disclose方法关闭进度对话框,android,kotlin,progressdialog,Android,Kotlin,Progressdialog,这是我的singlton类,用于自定义进度对话框,用于show对话框,我们有show方法,用于Disclose,我们有Disclose方法,我调用这个类 class CShowProgress(context: Context) { var s_m_oCShowProgress: CShowProgress? = null lateinit var m_Dialog: Dialog private var m_ProgressBar: ProgressBar? = nul
class CShowProgress(context: Context) {
var s_m_oCShowProgress: CShowProgress? = null
lateinit var m_Dialog: Dialog
private var m_ProgressBar: ProgressBar? = null
private var progressText: TextView? = null
fun getInstance(): CShowProgress {
if (s_m_oCShowProgress == null) {
s_m_oCShowProgress = CShowProgress(context!!)
}
return s_m_oCShowProgress as CShowProgress
}
fun show(m_Context: Context, message: String) {
m_Dialog = Dialog(m_Context)
m_Dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
m_Dialog.setContentView(R.layout.progress_bar)
m_ProgressBar = m_Dialog.findViewById(R.id.progressBar_cyclic)
m_ProgressBar!!.visibility = View.VISIBLE
m_ProgressBar!!.isIndeterminate = true
m_Dialog.setCancelable(false)
m_Dialog.setCanceledOnTouchOutside(false)
m_Dialog.show()
}
fun dismiss(m_Context: Context) {
m_Dialog = Dialog(m_Context)
m_Dialog.dismiss()
}
}
使用show我可以显示进度对话框,但使用dimiss我无法关闭任何人是否可以告诉我我做错了什么,我使用的是kotlin语言。当您调用“关闭”功能时,您会创建一个新的取消关闭对话框并尝试关闭它 这里我修改了你的解雇函数。我想这对你有帮助
CShowProgress(this).getInstance().show(this, "Please wait..")
and for dismiss i am calling
CShowProgress(this).getInstance().dismiss(this)
编辑:
哦,对不起,我没有检查你的单身模式。当您调用CShowProgress(this)
时,您将创建一个类的新实例,这样您就不能关闭以前的对话框
您可以创建一个Singleton
,如下所示:
fun dismiss() {
if(m_Dialog.isShowing){
m_Dialog.dismiss()
}
}
它是这样的:
companion object {
lateinit var instance: CShowProgress
private set
}
instance = CShowProgress(context)
CShowProgress.instance.show(context,message)
并按如下方式使用“显示”对话框:
companion object {
lateinit var instance: CShowProgress
private set
}
instance = CShowProgress(context)
CShowProgress.instance.show(context,message)
然后像这样把它变小:
companion object {
lateinit var instance: CShowProgress
private set
}
instance = CShowProgress(context)
CShowProgress.instance.show(context,message)
但我认为如果你像这样重构代码,你仍然会面临我在下面解释的另一个问题
此外,当您显示一个新对话框时,您会失去对旧对话框的引用,因此无法取消它。基本上,您正在创建n个对话框,但只保留对上次创建的对话框的引用。所以你不能忽略以前的。因此,如果您继续这样做,您可以在显示新对话框之前关闭以前的对话框(如果存在)。但是这种模式很难管理多个警报对话框,所以我建议您更改它
CShowProgress.instance.dismiss()
最后将Activity
上下文
传递给singleton对象,并且不清除活动onDestroy
何时会导致内存泄漏。请尝试此操作
fun show(m_Context: Context, message: String) {
if(m_Dialog.isShowing){
m_Dialog.dismiss()
}
m_Dialog = Dialog(m_Context)
m_Dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
m_Dialog.setContentView(R.layout.progress_bar)
m_ProgressBar = m_Dialog.findViewById(R.id.progressBar_cyclic)
m_ProgressBar!!.visibility = View.VISIBLE
m_ProgressBar!!.isIndeterminate = true
m_Dialog.setCancelable(false)
m_Dialog.setCanceledOnTouchOutside(false)
m_Dialog.show()
}
在活动中,为类创建一个对象,并像下面这样使用show和Disclose方法
class CShowProgress(context: Context) {
var s_m_oCShowProgress: CShowProgress? = null
lateinit var m_Dialog: Dialog
private var m_ProgressBar: ProgressBar? = null
private var progressText: TextView? = null
fun getInstance(): CShowProgress {
if (s_m_oCShowProgress == null) {
s_m_oCShowProgress = CShowProgress(context!!)
}
return s_m_oCShowProgress as CShowProgress
}
fun show(m_Context: Context, message: String) {
m_Dialog = Dialog(m_Context)
m_Dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
m_Dialog.setContentView(R.layout.progress_bar)
m_ProgressBar = m_Dialog.findViewById(R.id.progressBar_cyclic)
m_ProgressBar!!.visibility = View.VISIBLE
m_ProgressBar!!.isIndeterminate = true
m_Dialog.setCancelable(false)
m_Dialog.setCanceledOnTouchOutside(false)
m_Dialog.show()
}
fun dismiss() {
//no need to re initialise dialog only check for if the dialog is showing
if(m_Dialog.isShowing){
m_Dialog.dismiss()
}
}
}
好的,等等,让我试试这个不起作用,你能告诉我如何在Activity@savepopulation中调用show和Disclose方法吗?你能给我@savepopulation中的Singlton的完整类吗?我不能更改它,因为我是kotlinNo的新手,不需要空检查。顺便说一句,m_对话框已经定义为非空reference@DevenDcostra我认为显示/取消不应使用单例模式。你可以检查kotlin extensions的这类任务。等等,让我试试这个,然后我会告诉它是否工作,你能告诉我如何调用Activity@Nikhil Jadhav中的show and Disclose方法吗