[AndroidStudio] Fragment와 Fragment 사이의 이동

han91·2024년 5월 22일

[AndroidStudio]

목록 보기
11/15

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
    }
}
profile
천방지축어리둥절빙글빙글돌아가는개발자

0개의 댓글