Skip to content

Commit

Permalink
#178/한판승부 뒤로가기 버그 수정
Browse files Browse the repository at this point in the history
1. 프래그먼트 전환 로직 UISate 추가 및 replace로 변경
  • Loading branch information
rkdmf1026 authored and taeheeL committed Dec 20, 2023
1 parent e76f2b1 commit bffddf7
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -61,30 +61,29 @@ class CreateShortGameActivity :
else -> {}
}
}

viewModel.uiState.observe(this) {
when (it) {
is CreateShortGameState.ShortGameState ->
changeFragment(getString(R.string.label_short_game))

is CreateShortGameState.MissionDetailState ->
changeFragment(getString(R.string.label_mission_detail))
}
}
}

fun changeFragment(tag: String) {
private fun changeFragment(tag: String) {
val fragmentManager = supportFragmentManager
val transaction = fragmentManager.beginTransaction()

val fragment = fragmentManager.findFragmentByTag(tag) ?: when (tag) {
getString(R.string.label_mission_detail) -> missionDetailCreateFragment
getString(R.string.label_short_game) -> shortGameFragment
else -> null
} ?: return

if (fragment.isVisible) return

val transaction = fragmentManager.beginTransaction()

fragmentManager.fragments.filter { it.isVisible }
.forEach {
transaction.hide(it)
}

if (fragment.isAdded) {
transaction.show(fragment)
} else {
transaction.add(R.id.fcv_create_short_game, fragment, tag)
}
transaction.replace(R.id.fcv_create_short_game, fragment, tag)

transaction.commit()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package sopt.uni.presentation.shortgame.createshortgame

sealed class CreateShortGameState {
object ShortGameState : CreateShortGameState()
object MissionDetailState : CreateShortGameState()
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ class CreateShortGameViewModel @Inject constructor(private val shortGameReposito
private val _errorState = MutableLiveData<ErrorCodeState>()
val errorState = _errorState

private val _uiState =
MutableLiveData<CreateShortGameState>(CreateShortGameState.ShortGameState)
val uiState = _uiState

private val _missionList = MutableLiveData<List<MissionDetail>>()
val missionList = _missionList

Expand Down Expand Up @@ -76,4 +80,16 @@ class CreateShortGameViewModel @Inject constructor(private val shortGameReposito
fun setSelectedMissionId(missionId: Int) {
_missionId.value = missionId
}

fun changeUIState() {
when (uiState.value ?: return) {
CreateShortGameState.ShortGameState ->
_uiState.value =
CreateShortGameState.MissionDetailState

CreateShortGameState.MissionDetailState ->
_uiState.value =
CreateShortGameState.ShortGameState
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import android.view.View
import android.view.ViewGroup
import android.widget.EditText
import android.widget.TextView
import androidx.activity.OnBackPressedCallback
import androidx.activity.addCallback
import androidx.databinding.BindingAdapter
import androidx.fragment.app.activityViewModels
import sopt.uni.R
Expand Down Expand Up @@ -37,23 +37,17 @@ class ShortGameFragment : BindingFragment<FragmentShortGameBinding>(R.layout.fra
binding.apply {
viewModel = this@ShortGameFragment.viewModel
}
setBackPressed()
setAdapter()
setClickListener()
setViewModelObserve()

setBackPressed()
return binding.root
}

private fun setBackPressed() {
this.activity?.onBackPressedDispatcher?.addCallback(
requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner,
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
exitDialog()
}
},
)
) { exitDialog() }
}

private fun setAdapter() {
Expand Down Expand Up @@ -81,8 +75,7 @@ class ShortGameFragment : BindingFragment<FragmentShortGameBinding>(R.layout.fra
return
}
viewModel.setSelectedMissionId(missionId)
val activity = activity as CreateShortGameActivity
activity.changeFragment(getString(R.string.label_mission_detail))
viewModel.changeUIState()
}

private fun exitDialog() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.activity.OnBackPressedCallback
import androidx.activity.addCallback
import androidx.fragment.app.activityViewModels
import sopt.uni.R
import sopt.uni.databinding.FragmentMissionDetailCreateBinding
import sopt.uni.presentation.shortgame.createshortgame.CreateShortGameActivity
import sopt.uni.presentation.shortgame.createshortgame.CreateShortGameViewModel
import sopt.uni.presentation.shortgame.createshortgame.dialog.CreateShortGameDialogFragment
import sopt.uni.presentation.shortgame.missionrecord.MissionRecordActivity
Expand All @@ -24,9 +23,7 @@ class MissionDetailCreateFragment :
savedInstanceState: Bundle?,
): View {
super.onCreateView(inflater, container, savedInstanceState)
binding.apply {
viewModel = this@MissionDetailCreateFragment.viewModel
}
binding.viewModel = this@MissionDetailCreateFragment.viewModel
setViewModelObserve()
setClickListener()
setBackPressed()
Expand All @@ -47,32 +44,22 @@ class MissionDetailCreateFragment :
}

private fun setBackPressed() {
this.activity?.onBackPressedDispatcher?.addCallback(
requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner,
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
goToShortGame()
}
},
)
) { this@MissionDetailCreateFragment.viewModel.changeUIState() }
}

private fun setClickListener() {
binding.apply {
missionDetailCreateBack.setOnSingleClickListener {
goToShortGame()
this@MissionDetailCreateFragment.viewModel.changeUIState()
}
btnCreateShortGame.setOnSingleClickListener {
createDialog()
}
}
}

private fun goToShortGame() {
val activity = activity as CreateShortGameActivity
activity.changeFragment(getString(R.string.label_short_game))
}

private fun createDialog() {
requireActivity().let {
CreateShortGameDialogFragment().apply {
Expand Down

0 comments on commit bffddf7

Please sign in to comment.