Kotlin 기초#7 Activity 값 공유

0

야! 너두 코틀린

목록 보기
7/13

Activity 값을 공유하는 방법을 알아보겠습니다.

1. 🍕 Activity -> Activity


        with(bining) {
        //Button을 클릭하면 ToggleButtonActivity가 시작되게끔 이벤트를 부착하였다.
            btnstart.setOnClickListener {
            
                val intent = Intent(this@StudyActivity14, ToggleButtonActivity::class.java)
                //99를 보내면 끝났을때 99가 반환된다.
                startActivityForResult(intent ,  99)
            }

ToggleButtonActivity

        val returnIntent = Intent()
        returnIntent.putExtra("return", "빤쥬")
    	setResult(Activity.RESULT_OK , returnIntent)
        finish()

MainActivity

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if (resultCode == Activity.RESULT_OK) {
        //request code가 반환된다.
            when (requestCode) {
                99 -> {
                	//엘비스 플레슬리 : null이 아닐경우 뒤에것을 실행시킨다.
                    data?.getStringExtra("return")?.let { message ->
                        Toast.makeText(this, message, Toast.LENGTH_LONG).show()
                    }
                }
                100 -> {

                }
            }
        }
    }

2. 🍔 Activity -> Fragment

Activity에서 Fragment로 전달하는 방법은 Bundle을 이용한다.

2.1 Activity

val bundle = Bundle()
bundle.putString("박하", "응꼬")
listFragment.arguments = bundle
val trasaction = supportFragmentManager.beginTransaction()
trasaction.add(R.id.senderfragment, listFragment)
trasaction.commit()

2.2 Fragment

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
//이런식으로 값을 받을수 있다.
binding.textviewHaun.text = arguments?.getString("박하은")

    }

3. 🍟 Fragment -> Fragment

3.1 A fragment

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
	super.onViewCreated(view, savedInstanceState)
	with(binding) {
            YES.setOnClickListener {
                //val bundle = Bundle()
                //집어넣을 데이터가 적을경우, bundleOf를 사용한다.
                val bundle = bundleOf("senderkey" to "Yes")
                //requset으로 받을수 있다.
                setFragmentResult("requset", bundle)
            }
            buttonNo.setOnClickListener {
                //val bundle = Bundle()
                val bundle = bundleOf("senderkey" to "No")
                setFragmentResult("requset", bundle)
            }
        }
    }

3.2 B fragment

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        
        
        setFragmentResultListener("requset") { key, bundle ->
        	//getString이 없을 경우 스톰
            bundle.getString("senderkey")?.let { value ->
                binding.textView12.text = value
                Log.d("Debug", value)
            }
        }
    }
profile
쉽게 가르칠수 있도록 노력하자

0개의 댓글