完成并删除片段,然后返回MainActivity

时间:2019-04-19 18:20:45

标签: android android-fragments

Android Studio 3.4

我有一个简单的股票预测应用程序,该应用程序使用一个名为ForecastActivity的活动和三个分别为LoadingFragmentForecastFragmentRetryFragment的片段

将首先使用

中的以下代码添加RetryFragment
`ForecastActivity`:
 private fun startRetryFragment() {
        fragmentManager?.let {
            val fragmentTransaction = it.beginTransaction()
            fragmentTransaction.replace(R.id.forecastActivityContainer, RetryFragment(), "RetryFragment")
            fragmentTransaction.commit()
        }
    }

我在RetryFragment中有一个按钮,它将再次启动ForecastActivity

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        btnRetry.setOnClickListener {
            startActivity(Intent(activity, ForecastActivity::class.java))
        }
    }

然后LoadingFragment将开始在ForecastActvity

中使用此代码
 private fun startLoadingFragment() {
        fragmentManager?.let {
            val fragmentTransaction = it.beginTransaction()
            fragmentTransaction.replace(R.id.forecastActivityContainer, LoadingFragment(), "LoadingFragment")
            fragmentTransaction.commit()
        }
    }

然后,在加载完成后,ForecatActivity将启动ForecastFragment

private fun startForecastFragment() {
        fragmentManager?.let {
            val fragmentTransaction = it.beginTransaction()
            fragmentTransaction.replace(R.id.forecastActivityContainer, RetryFragment(), "ForecastFragment")
            fragmentTransaction.commit()
        }

基本上,在我的ForecastActivity中,我试图从后堆栈中除去碎片,我只是想从这里完成应用程序。但是,由于我没有向后堆栈添加任何内容,因此我不希望计数大于零。但是,我想知道如何结束该应用程序并阻止RetryFragment再次显示?

override fun onBackPressed() {
        fragmentManager?.let {
            if(it.backStackEntryCount > 0) {

                it.popBackStackImmediate()
            }
            else {
                super.onBackPressed()
            }
        }
    }

但是,当我从ForecastFragment上单击后退时,我希望应用程序完成。但是,将显示RetryFragment,然后我必须再次单击“后退”按钮以结束该应用程序。

RetryFragment中这样做有什么问题吗? 基本上,我只想从RetryFragment回到ForecastActivity重新开始。 startActivity(Intent(activity, ForecastActivity::class.java))

非常感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

我认为您的问题是您要从ForecastActivity重新启动RetryFragment。如果您重组代码以使RetryFragment可以触发ForecastActivity中的重试功能,则可以将RetryFragment替换为下一个适当的片段,而不用调用startActivity()来创建一个新的ForecastActivity