class MainActivity : AppCompatActivity(), BodyPartDialogFragment.OnStartClickListener {
private val viewModel: MainViewModel by viewModels()
private lateinit var bottomNav: BottomNavigationView
private lateinit var fm: FragmentManager
private lateinit var ft: FragmentTransaction
private var curFrag: Fragment? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
bottomNav = findViewById(R.id.bottom_nav)
bottomNav?.setOnNavigationItemSelectedListener { menu ->
// viewModel.setMenuValue(menu)
fm = supportFragmentManager
ft = fm.beginTransaction()
curFrag = fm.primaryNavigationFragment
val tag: String = menu.toString()
val id: Int = menu.itemId
curFrag?.let { cf -> ft.hide(cf) } // cf == curFrag
var f: Fragment? = fm.findFragmentByTag(tag)
if(f == null) {
when (id) {
R.id.list -> f = WorkoutListFragment()
R.id.calendar -> f = CalendarFragment()
}
ft.add(R.id.content_layout, f!!, tag)
}
else ft.show(f)
ft.setPrimaryNavigationFragment(f)
ft.setReorderingAllowed(true)
ft.commitNow()
true
}
}
MVVM 패턴으로 앱을 만들고 있기때문에 코드를 좀 나눌 필요성이 있어보였습니다.
나누려고 시도는 해보았는데.. 막상 나누려고보니 여기서 뭘 더 나눠야할지 모르겠습니다..
사실 딱히 건드린건 없는데 말이죠.
보시면 f나 fm, ft 전부 뷰와 관련된것들이라 액티비티가 뷰이므로 여기서 작성해야하는 것이 맞나 싶은데
코드가 너무 많은것 같아서 이게 맞나싶구요..
하나 나뉘어야 할것같은것은.. tag 코드와 id 코드인데.. 이건 데이터 관련이고 바텀내비게이션에서
다른 메뉴로 이동할때마다 값이 바뀌기 때문에 이 두개는 뷰모델로 보내서 라이브데이터로
하는게 어떤가 싶은데 어떤가요..?
어떻게 더 나누면 좋을까요?