[Kotlin] 다른 Activity 함수 쓰기

Hand·2022년 7월 26일
1

Android

목록 보기
2/17

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()
		}
    }
}
profile
화이팅!

0개의 댓글