Jetpack Compose가 딱 좋은 방법이긴 한데, 이건 사용하지 않으시는 것 같고, View를 이용하는 방법 중에서는
지원하는 국가가 2-3개 정도 까지라면 1, 2, 3번 방법이 크게 차이는 없을 것으로 보이나, 지원 국가가 늘어날 수록 2번 보다는 1번 방법이 코드르를 국가에 따라 명료하게 분리할 수도 있고. 레이아웃이 차이가 좀 생기는 경우에도 대처하기 쉬울 것 같고, 추후에 특정 국가와 관련된 부분을 수정할 때, 다른 국가의 코드나 레이아웃은 건드리지 않아서 안전할 것으로 보입니다. 물론 프레그먼트를 사용하지 않고 국가별로 레이아웃만 별도로 준비해서 이걸 rootView에 추가하는 방법도 사용할 수 있겠지만, 안드로이드에서 이미 프래그먼트를 지원하고 있으니, 이걸 사용하면 될 것 같습니다.
선택한 국가에 따른 프레그먼트를 맵핑할 때, 아래처럼 enum 클래스를 하나 사용하면 도움이 됩니다. (코드는 코를린입니다.)
interface FragmentAware {
fun getFragment(): Fragment
}
enum class Country(val title: String) : FragmentAware {
CHN("China") {
override fun getFragment(): Fragment {
return ChinaSignUpFragment()
}
},
JPN("Japan") {
override fun getFragment(): Fragment {
return JapanSignUpFragment()
}
},
KOR("Korea") {
override fun getFragment(): Fragment {
return KoreaSignUpFragment()
}
}
}
회원가입 화면에서 국가를 선택할 때 enum 클래스에서 선택한 국가를 찾아, 보여주어야 할 프래그먼트를 가져올 수 있습니다.
fun selectCountry(val countryName: String) {
val selectedCountry = Country.values().find { country ->
country.title.equals(countryName, ignoreCase = false)
}!!
supportFragmentManager()
.beginTransaction()
.replace(R.id.container, selectedCountry.getFragment())
.commit()
}
혹시 두번째 방법을 사용한다면, 마찬가지로 enum 클래스를 이용하여 보여주거나 감추어야 할 뷰를 지정하여 사용하실 수 있습니다.
enum class Country(val title: String, val nationalIDVisibie: Boolean) {
CHN("China", false) ,
JPN("Japan", false),
KOR("Korea", true)
}
fun selectCountry(val countryName: String) {
val selectedCountry = Country.values().find { country ->
country.title.equals(countryName, ignoreCase = false)
}!!
binding.nationalIDView.isVisible = selectedCountry.nationalIDVisibie
}