MainActivity.kt
class MainActivity : AppCompatActivity() {
val binding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
lateinit var listFragment: ListFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
setFragment()
binding.btnSend.setOnClickListener {
listFragment.setValue("value to send")
}
}
fun setFragment() {
val listFragment : ListFragment = ListFragment()
val bundle = Bundle()
bundle.putString("key1", "This is List Fragment")
bundle.putInt("key2", 20240422)
listFragment.arguments = bundle
val transaction = supportFragmentManager.beginTransaction()
transaction.add(R.id.frame_layout, listFragment)
transaction.commit()
}
fun goDetail() {
val detailFragment = DetailFragment()
val transaction = supportFragmentManager.beginTransaction()
transaction.add(R.id.frame_layout, detailFragment)
transaction.addToBackStack("detail")
transaction.commit()
}
fun goBack() {
// emulator의 back 버튼을 눌렀을 때
onBackPressed()
}
}
ListFragment.kt
class ListFragment : Fragment() {
lateinit var mainActivity : MainActivity
lateinit var binding: FragmentListBinding
// var mainActivity : MainActivity = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentListBinding.inflate(inflater, container, false)
binding.txtTitle.text = arguments?.getString("key1")
binding.txtValue.text = arguments?.getInt("key2").toString()
binding.btnNext.setOnClickListener {
mainActivity.goDetail()
}
return binding.root
}
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is MainActivity) mainActivity = context
}
fun setValue(value : String) {
binding.txtFromActivity.text = value
}
}
DetailFragment.kt
class DetailFragment : Fragment() {
var mainActivity : MainActivity? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding = FragmentDetailBinding.inflate(inflater, container, false)
binding.btnBack.setOnClickListener {
mainActivity?.goBack()
}
return binding.root
}
// 얘로 연결시켜줘야함
override fun onAttach(context: Context) {
super.onAttach(context)
mainActivity = context as MainActivity
}
}