Android Studio 3.4
我有一个简单的股票预测应用程序,该应用程序使用一个名为ForecastActivity的活动和三个分别为LoadingFragment
,ForecastFragment
和RetryFragment
的片段
将首先使用
中的以下代码添加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))
非常感谢您的任何建议。
答案 0 :(得分:1)
我认为您的问题是您要从ForecastActivity
重新启动RetryFragment
。如果您重组代码以使RetryFragment
可以触发ForecastActivity
中的重试功能,则可以将RetryFragment
替换为下一个适当的片段,而不用调用startActivity()
来创建一个新的ForecastActivity
。