[Android] Fragment에서 DialogFragment 값 가져오기

MJ·2023년 3월 16일
0

Android

목록 보기
3/8
post-thumbnail

DialogFragment에서 입력한 값을 확인버튼을 눌렀을 때 Fragment로 값을 가져올려고 한다.

나는 NumberPicker를 이용한 Dialog를 구현해놓은 상태이다.

인터페이스를 사용해서 데이터를 넘겨줄 것이다.

DialogFragment

class DialogFragment : DialogFragment() {
	private var _binding: FragmentDialogBinding? = null
    private val binding get() = _binding!!
    
    // Fragment에 데이터를 넘겨주기 위한 인터페이스
    interface FragmentInterfacer {
    	fun onButtonClick(input: String)
    }
    private var fragmentInterfacer: FragmentInterfaccer? = null
    fun setFragmentInterfacer(fragmentInterfacer: FragmentInterfacer?) {
    	this.fragmentInterfacer = fragmentInterfacer
    }
    
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    	_binding = DialogUploadNftDeadlineBinding.inflate(inflater, container, false)
        dialog?.window?.setBackgroundDrawableResource(R.color.trans80_black)
        return binding.root
    }
    
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    	super.onViewCreated(view, savedInstanceState)
        
        //OK 버튼을 누르면 fragment로 data를 보내고 dismiss
		binding.btnOk.setOnClickListener {
        	fragmentInterfacer?.onButtonClick(binding.np.value.toString())
            dialog?.dismiss()
        }
        // Cancel버튼을 누르면 그냥 dismiss
        binding.btnCancel.setOnClickListener {
        	dialog?.dismiss()
        }
    }
}

정리하자면

interface FragmentInterfacer {
	fun onButtonClick(input: String)
}
private var fragmentInterfacer: FragmentInterfaccer? = null
fun setFragmentInterfacer(fragmentInterfacer: FragmentInterfacer?) {
    this.fragmentInterfacer = fragmentInterfacer
}

인터페이스를 선언한 후

fragmentInterfacer?.onButtonClick("보내고자 하는 데이터")

로 데이터를 보냈다.

Fragment

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
	super.onViewCreated(view, savedInstanceState)
    binding.btnDialog.setOnClickListener {
    	//dialogfragment를 띄우는 부분
        val dialog = DialogFragment()
        dialog.show(requireActivity().supportFragmentManager, "DialogFragment")
        
        // 데이터 받아 오는 부분
        dialog.setFragmentInterfacer(object : UploadDeadLineFragment.FragmentInterfacer {
        	override fun onButtonClick(input: String) {
            	binding.tvResult.setText(input)
            }
        }
        
    }
}

tvResult를 가진 TextView에 DialogFragment에서 받은 값을 출력할 것이다.

0개의 댓글