[Android] Fragment / Activity간 데이터 주고받기

Jinny·2021년 3월 10일
4

Android

목록 보기
18/32
post-thumbnail

App을 개발하다보면 Activity <-> Fragment 간에 데이터나 결과/요청 코드를 많이 주고 받게 된다.

크게 2가지 경우로 나눌 수 같다.

  • 말 그대로 데이터만 전달하는 경우
  • 이동한 Activity 또는 Fragment에서 결과를 받아 다시 돌아와서 할 작업이 있는 경우

🚩 Fragment/Activity -> Activity

(1) Intent1 에서 Intent2로 데이터를 가지고 이동하기

  • 첫번째 방법
// 제일 단순하고 쉬운 방법
val intent = Intent(this@Intent1,Intent2::class.java)
intent.putExtra("num1",1) //데이터 넣기
intent.putExtra("num2",2) //데이터 넣기
startActivityForResult(intent,101)
// 이동한 activity에서 추후 받아올 데이터가 없는
// 단순 데이터 전달 및 이동의 경우
// startActivity(intent)
  • 두번째 방법
//두번째 방법
val intent = Intent(this@Intent1,Intent2::class.java)
//코틀린의 유용한 기능!🤩 apply
//한눈에 모아서 볼 수 있어서 유용한 듯
intent.apply {
	this.putExtra("num1",1) // 데이터 넣기
   	this.putExtra("num2",2) // 데이터 넣기
}
startActivityForResult(intent,101)
// 이동한 activity에서 추후 받아올 데이터가 없는
// 단순 데이터 전달 및 이동의 경우
// startActivity(intent)

(2) Intent2에서 데이터 받기

 //마지막 인자로 defaultValue를 꼭 넣어줘야함 null일수 있으니!
val number1 = intent.getIntExtra("num1", 0)
val number2 = intent.getIntExtra("num2", 0)

(3) 결과 코드 가지고 Intent1로 이동하기

val resultIntent = Intent()
resultIntent.putExtra("result","333")
setResult(Activity.RESULT_OK,resultIntent)
//액티비티 종료! -> 이전의 Activity인 Intent1로 이동됨
finish()

(4) Intent1에서 데이터 받기

// requestCode : (1)에서 보내줬던 요청 코드
// resultCode : Intent2에서 보낸 결과 코드
// data : Intent2에서 보낸 데이터
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
        if(resultCode==Activity.RESULT_OK){
        	val result = data.getIntExtra("result",0)
            	Log.d("돌아왔죵~~",""+result)
        }
    }

🚩 Fragment/Activity -> Fragment

(1) Fragment1에서 Fragment2로 데이터 가지고 이동하기

var fragment2 = Fragment2()
var bundle = Bundle()
bundle.putInt("num1",1)
bundle.putInt("num2",2)
fragment2.arguments = bundle //fragment의 arguments에 데이터를 담은 bundle을 넘겨줌

activity?.supportFragmentManager!!.beginTransaction()
                        .replace(R.id.view_main, fragment2)
                        .commit()

(2) Fragment2에서 데이터 받기

val num1 = arguments?.getInt("num1")
val num2 = arguments?.getInt("num2")

💁 정리해보기!

Activity/Fragment ==> Fragment
: Bundle을 사용한다.

1) 이동할 Fragment 객체 생성
2) Bundle 객체 생성 및 데이터 저장 
→ bundle.putXXXX(name, value)
3) Fragment객체.arguments = Bundle객체

Activity/Fragment ==> Activity
: Intent를 사용한다.

1) 이동할 액티비티 클래스를 담고 있는 Intent 객체 생성
2) Intent객체.putXXXExtra(name, value)
3) startActivity(Intent객체)

++ 출발지에 따른 startActivity

activity인 경우 :  startActivity(intent)
fragment인 경우인 경우 : activity.startActivity(intent)

🚩 결과

: Fragment에서 Fragment로 데이터를 가지고 이동한 모습


참고 사이트 : 안드로이드 공식 문서 - 프래그먼트 간 데이터 전달
profile
신입 개발자👩‍💻

3개의 댓글

comment-user-thumbnail
2021년 5월 25일

안녕하세요! 질문이 있어서 글 남깁니다.
MainActivity() 위의 homeFragment에서 버튼을 눌러서 FilterActivity를 띄우고 FilterActivity에서 선택한 값들을 다시 homeFragment로 전달하고 싶은데 이럴땐 어떻게 해야 하나요.... ㅠㅠㅠ

1개의 답글