DialogFragment 여는 코드
SomethingDialog().showNow(supportFragmentManager,"")
DialogFragment의 코드
class DialogStudy : DialogFragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// 처리
return binding.root
}
override fun onResume() {
super.onResume()
//전체화면으로 만드는 코드
dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.WHITE))
dialog?.window?.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
}
}
/*
아래 코드는 예시일뿐, 아래 코드를 이용해 적절히 사용하자
사용자가 두번 연속으로 누르면 프래그먼트가 두번 열리는데 그걸 방지하는 코드인듯..?
프래그먼트의 BackStack에 관해 알고있으면 좋을듯하다. 하단에 참고하면 좋을만한 포스팅 링크를 남겨놓는다.
*/
val fragmentClass = fragmentClass()
changeFragment(activity, fragmentClass)
fun changeFragment(
activity: FragmentActivity,
fragment: Fragment
) {
val backStateName = fragment.requireArguments().getString("name")
val fragmentManager = requireActivity().supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
fragment.arguments = bundle
val backStackEntryCount = fragmentManager.backStackEntryCount
if (backStackEntryCount > 0) { //프래그먼트가 1개이상 존재할 경우
val backStackEntry = fragmentManager.getBackStackEntryAt(backStackEntryCount - 1)
val beforeBackStackName = backStackEntry.name
//이전 백스택과 현재 백스텍이 동일하다면 백스택을 추가하지않고, 동일하지 않다면 추가한다. (중복 스택생성 방지)
if (backStateName != beforeBackStackName) {
fragmentTransaction.replace(R.id.content_frame, fragment) // content_frame은 XML의 FrameLayout
fragmentTransaction.addToBackStack(backStateName)
}
} else { //최초 프래그먼트 세팅시
fragmentTransaction.replace(R.id.content_frame, fragment)
fragmentTransaction.addToBackStack(backStateName)
}
fragmentTransaction.commit()
}
}
BackStack에 대해 참고 하면 좋을만한 포스팅
https://hwanine.github.io/android/backstack2/
'프로그래밍 > Kotlin' 카테고리의 다른 글
[Kotlin] 카카오 API를 이용해 공유하기 (0) | 2021.12.22 |
---|---|
[Kotlin] Dialog 종료시 커스텀 리스너 동작 (0) | 2021.12.14 |
안드로이드 RecyclerView 사용법 (0) | 2021.12.12 |
[Kotlin] progressbar 진행시 터치 불가능하도록 설정 (0) | 2021.12.09 |
[Kotlin] 안드로이드 자동로그인 코드 (0) | 2021.12.09 |
댓글