App을 개발하다보면 Activity <-> Fragment 간에 데이터나 결과/요청 코드를 많이 주고 받게 된다.
크게 2가지 경우로 나눌 수 같다.
(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)
}
}
(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로 데이터를 가지고 이동한 모습
안녕하세요! 질문이 있어서 글 남깁니다.
MainActivity() 위의 homeFragment에서 버튼을 눌러서 FilterActivity를 띄우고 FilterActivity에서 선택한 값들을 다시 homeFragment로 전달하고 싶은데 이럴땐 어떻게 해야 하나요.... ㅠㅠㅠ