Dialog, Fragment 등등의 환경에서 Activity의 함수를 사용해야하는 상황이 발생할 수 있습니다.
저의 경우 Dialog에서 Dialog를 실행한 Activity의 함수를 사용해야하는 상황이 발생하였고, 이를 해결한 과정을 작성하였습니다.
activity 자체를 변수화 시켜서 이를 초기화해주고 이것을 다른 class에서 사용할 수 있도록 반환해주는 함수를 만들어줌으로써 사용할 수 있습니다.
Acticity 변수화 및 반환
class MainActivity : AppCompatActivity() {
init {
instance = this
}
companion object {
private var instance: MainActivity? = null
fun getInstance(): MainActivity? {
return instance
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val customDialog = CustomDialog(this)
customDialog.showDialog()
...
}
private fun showToast() {
Toast.makeText(this, "일반 class에서 Activity의 함수 실행", Toast.LENGTH_SHORT).show()
}
}
이와 같이 구현을 해주면, 이제 다른 일반 class에서도 이 activity를 사용할 수 있습니다.
예시를 위해서 CustomDialog라는 dialog를 만들었습니다.
dialog 내에는 menu1이라는 버튼이 있고, 이 버튼을 클릭했을 때, MainActivity()의 함수를 실행합니다.
class CustomDialog(context: Context) {
private val mContext = context
private val dialog = Dialog(mContext)
fun showDialog() {
val menu1 = dialog.findViewById(R.id.menu1)
menu1.setOnClickListener {
val mainActivity = MainActivity.getInstance()
mainActivity!!.showToast()
dialog.dismiss()
}
}
}