Фрагмент моментально переключается при добавлении в базу данных

Рейтинг: 0Ответов: 0Опубликовано: 26.05.2023

Делал тест в приложении, и возникла такая ситуация, что при добавлении факта того, что тест был пройден без ошибок в базу данных, у меня моментально переключается фрагмент на главный. Помогите, пожалуйста, как сделать, чтобы данной смены не происходило.

Код фрагмента, который появляется после прохождения теста:

package com.example.firstapp.Fragments




class TestResultFrag : Fragment() {
    lateinit var binding: FragmentTestResultBinding
    val lifeData:LifeData by activityViewModels()
    private val dynamicObjects:DynamicObjects by activityViewModels()
    val transition: Transition by activityViewModels()
    private lateinit var mAccountViewModel: AccountViewModel
    lateinit var mAccountTestViewModel: AccountTestViewModel
    lateinit var testId: String


override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View {
    val score = lifeData.testScore.value
    val qAmountStr = dynamicObjects.dynamicTest.value!!.qAmount
    val qAmountInt = qAmountStr.substring(0,qAmountStr.indexOf(" ")).toInt()

    binding = FragmentTestResultBinding.inflate(inflater)
    mAccountViewModel = ViewModelProvider(this).get(AccountViewModel::class.java)
    mAccountTestViewModel = ViewModelProvider(this).get(AccountTestViewModel::class.java)
    testId = dynamicObjects.dynamicTest.value!!.Num.toString()

    val accId: Int = lifeData.account.value!!.id
    val data = mAccountTestViewModel.checkTestState(accId,testId)

    if (score == qAmountInt) {
        data.asLiveData().observe(activity as LifecycleOwner){
            if (it == null) {
                insertTestToDatabase(accId, testId)
                updateProgress()
            }
        }

    }
    binding.txtResultScore.text = getString(
        R.string.result_score,
        score,
        qAmountInt
    )


    return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

    binding.btTryAgain.setOnClickListener {
        transition.goAgain.value = true
    }

    binding.btQuit.setOnClickListener{
        transition.goToTests.value = true
    }
}

private fun insertTestToDatabase(accountId:Int, testId:String){
    val accTest = AccountTestIsPass(accountId, testId,true)
    mAccountTestViewModel.addAccountTest(accTest)
    Toast.makeText(requireContext(),"Тест пройден", Toast.LENGTH_LONG).show()
}

private fun updateProgress(){
    val accId = lifeData.account.value!!.id
    val firstName = lifeData.account.value!!.firstName
    val lastName = lifeData.account.value!!.lastName
    val phone = lifeData.account.value!!.phone
    val email = lifeData.account.value!!.email
    val password = lifeData.account.value!!.password
    val progress = lifeData.account.value!!.progress + 10f

    val account = Account(accId,firstName,lastName,email, password, phone, progress)

    mAccountViewModel.updateAccount(account)

}

companion object {

    fun newInstance() =
        TestResultFrag()
}
}

Но когда тест пройден не полностью верно, то все хорошо, получается проблема кроется в данных строчках?

if (it == null) {
   insertTestToDatabase(accId, testId)
   updateProgress()
}

Но как решить данную трудность я не могу додуматься.

Как выглядит Дао класс:

  @Insert(onConflict = OnConflictStrategy.IGNORE)
  suspend fun addPassedTest(TestIsPassed: AccountTestIsPass)
}

Репозиторий:

 suspend fun addPassedTest(TestIsPass:AccountTestIsPass){
        accountTestDao.addPassedTest(TestIsPass)
    }
}

Viewmodel:

fun addAccountTest(accountTest: AccountTestIsPass) {
    viewModelScope.launch(Dispatchers.IO) {
        repository.addPassedTest(accountTest)
        }
    }
}

Ответы

Ответов пока нет.