Фрагмент не добавлен в ошибку Backstack, в то время как явное addToBackStack выдает ошибку - PullRequest
0 голосов
/ 02 марта 2019

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

package `in`.ac.bvmengineering.udaan2k19.Activity

import `in`.ac.bvmengineering.udaan2k19.Fragment.EventCategoryFragment
import `in`.ac.bvmengineering.udaan2k19.R
import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v7.app.AppCompatActivity
import android.widget.Toast

class EventActivity : AppCompatActivity() {
    var fragment: Fragment? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_events)
        switchFragment(EventCategoryFragment())
    }

    private fun switchFragment(fragment: Fragment) {
        supportFragmentManager.beginTransaction().add(R.id.event_frame, fragment,"Category").addToBackStack("Category").commitNow()
    }

    override fun onBackPressed() {
        super.onBackPressed()
        Toast.makeText(this,"${supportFragmentManager.backStackEntryCount}",Toast.LENGTH_LONG).show()
       fragment = currentFragment()
        when (fragment?.tag) {
           "Category" -> finish()
            "Events", "Details" -> supportFragmentManager.popBackStackImmediate(fragment?.tag, FragmentManager.POP_BACK_STACK_INCLUSIVE)
        }
    }

    private fun currentFragment(): Fragment? {
        return supportFragmentManager.findFragmentByTag(supportFragmentManager.getBackStackEntryAt(supportFragmentManager.backStackEntryCount-1).name)
    }
}

Но каждый раз, когда я пытаюсь вставить обратный стек, он говорит, что задний стек пуст, я пытался добавить строку

supportFragmentManager.beginTransaction().add(R.id.event_frame, fragment,"Category").addToBackStack("Category").commitNow()

Но выдается исключение IllegealStateException:

java.lang.IllegalStateException: This transaction is already being added to the back stack
...