ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Fragment 통신 (setTargetFragment, Listener)
    Android 2020. 10. 7. 17:11
    반응형

    많은 방법들이 있겠지만 setTargetFragment와 Listener를 생성해주는것 중에 생각이 들었습니다.

     

    dialog.setTargetFragment(this, DialogNumber.DIALOG_OFTEN)

    setTargetFragment는 이런식으로 dialog에 fragment와 code 값을 넘겨줍니다.

                    targetFragment?.onActivityResult(targetRequestCode, Activity.RESULT_OK, Intent())  

    dialog에서 특정 이벤트 발생시 다시 통신을 보냅니다.

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
            super.onActivityResult(requestCode, resultCode, data)
            when (requestCode) {
                DialogNumber.DialogNumber.DIALOG_OFTEN -> {
                    when (resultCode) {
                        Activity.RESULT_OK -> {
                            val intent = Intent(requireContext(), MainActivity::class.java)
                            startActivity(intent)
                        }
                        Activity.RESULT_CANCELED -> {
                            val intent = Intent(context, SubActivity::class.java)
                            startActivity(intent)
                        }
                    }
                }

    통신을 받으면 requestCode와 resultCode에 따라 구현해주면 됩니다.

    private var mListener: AcceptDialogListener? = null
    
        interface AcceptDialogListener {
            fun onNextClick()
        }
    
        fun setAcceptDialogListener(mListener: AcceptDialogListener) {
            this.mListener = mListener
        }
    

     

    리스너 같은 경우에는 dialog 쪽에 인터페이스를 만들어 준뒤

     btAccept.setOnClickListener { mListener?.onNextClick() }

    특정 이벤트가 발생시 다이얼 로그에서 리스너를 호출시켜줍니다. ( 리스너가 말할 준비 됐어!! 하는거와 비슷합니다.)

    dialog.setAcceptDialogListener(object :
                    BaseAcceptDialog.AcceptDialogListener {
                    override fun onNextClick() {
                        val intent = Intent(requireContext(), BpMeasureActivity::class.java)
                        startActivity(intent)
                    }

    그리고 통신 받는 쪽에서 리스너를 구현해주면 ( 들을 준비 됐습니다!! 하는거와 비슷합니다.)

    다이얼로그 쪽에서 리스너를 호출할 때마다 구현부분이 실행되게 됩니다.

     

    이 두가지를 비교했을때 하는 기능은 비슷하지만 과연 어떤걸 써야할까라는 생각이 들었습니다.

    제 생각에는 뎁스에 차이로 생각 했습니다.

    뎁스가 만약 1뎁스라면 리스너를 사용하는것이 간단하지만

    만약 뎁스가 더 깊어진다면 뎁스마다 리스너를 추가적으로 구현해야하는 문제점이 있습니다.

    이럴때는 setTargetFragment를 사용하여 통신하는 것이 효율적이라고 생각합니다.

     

    지극히 주관적인 의견이라 맞는지는 모르겠지만 통신 방법에 대해 생각해보게 됐었습니다.

    추후에는 sharedviewmodel를 사용하여 통신하는 방법을 구현해보고 공부해보겠습니다.

    반응형

    'Android' 카테고리의 다른 글

    [Android] 파일 공유 대응 방법(File Provider)  (0) 2020.11.13
    [Android] 카카오 로그인 v2 API with kotlin - 1  (0) 2020.10.16
    BindingAdapter에서 margin 설정하기  (0) 2020.09.24
    [Android] Task  (0) 2020.09.02
    Koin 입문기  (0) 2020.09.02

    댓글

Designed by Tistory.