https://gun0912.tistory.com/72 이분의 코드를 코틀린에서 구현해보려 합니다.
코드는 BaseApplication에서 Progress를 설정하고,
BaseActivity에서 만들어 놓은 Progress기능을 가져온 후에
사용할 Activity에서 BaseActivity를 상속받아 바로바로 함수를 호출해서 쓸 수 있게 만든거라고 이해했습니다.
문제는 코틀린이 전역변수가 없다보니, 함수마다 다른 변수로 인식을 하는거 같습니다.
ProgressON()과 ProgressOFF()라는 함수가 있는데, 서로 다른 progressDialog를 인식하는지, ProgressON()이 정상 실행된 이후에 ProgressOFF()함수가 정상작동하지 않습니다 ㅠㅠ
전역변수가 없다보니 최대한 companion object를 이용해보려고 했습니다.
이것저것 테스트하는중이라 필요없는 코드도 조금 있습니다 ㅠㅠ
코드는 아래 첨부하였습니다.
BaseApplication.kt
class BaseApplication : Application() {
lateinit var baseApplication: BaseApplication
companion object {
lateinit var progressDialog:AppCompatDialog
fun getInstance(activity: Activity?): BaseApplication {
progressDialog = AppCompatDialog(activity)
var base = BaseApplication()
return base
}
}
override fun onCreate() {
super.onCreate()
baseApplication = this
}
fun progressON(activity: Activity?, message: String) {
Log.d("@@@ BaseApp", "ProgressON")
// progressDialog = AppCompatDialog(activity)
if (activity == null || activity.isFinishing) {
return
}
if (progressDialog != null && progressDialog!!.isShowing()) {
progressSET(message)
} else {
progressDialog!!.setCancelable(false)
progressDialog!!.getWindow()!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
progressDialog!!.setContentView(R.layout.progress_loading)
progressDialog!!.show()
}
val tv_progress_message = progressDialog!!.findViewById(R.id.tv_progress_message) as TextView?
if (!TextUtils.isEmpty(message)) {
tv_progress_message!!.text = message
}
}
fun progressSET(message: String) {
if (progressDialog == null || !progressDialog!!.isShowing()) {
return
}
val tv_progress_message = progressDialog!!.findViewById(R.id.tv_progress_message) as TextView?
if (!TextUtils.isEmpty(message)) {
tv_progress_message!!.text = message
}
}
fun progressOFF() {
Log.d("@@@ BaseApp", "ProgressOFF")
if(progressDialog ==null) {
Log.d("@@@ BaseApp", "ProgressOFF - Null")
} else {
Log.d("@@@ BaseApp", "ProgressOFF - NotNull")
}
if(progressDialog.isShowing) {
Log.d("@@@ BaseApp", "ProgressOFF - isShowing")
}else{
Log.d("@@@ BaseApp", "ProgressOFF - isNotShowing")
}
if (progressDialog != null && progressDialog!!.isShowing()) {
Log.d("@@@ BaseApp", "ProgressOFF - True")
progressDialog!!.dismiss()
}else {
Log.d("@@@ BaseApp", "ProgressOFF - False")
progressDialog.dismiss()
}
}
}
BaseActivity.kt
open class BaseActivity : AppCompatActivity() {
fun progressON() {
BaseApplication.getInstance(this).progressON(this, "")
}
fun progressON(message: String) {
BaseApplication.getInstance(this).progressON(this, message)
}
fun progressOFF() {
BaseApplication.getInstance(this).progressOFF()
}
}