【发布时间】:2021-06-17 08:37:53
【问题描述】:
我有以下代码
package com.example.covid19
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.fragment.app.add
import androidx.fragment.app.commit
import com.example.covid19.fragments.CountryListFragment
import com.example.covid19.fragments.CountryStatisticFragment
import com.example.covid19.fragments.onClickedListener
class MainActivity : AppCompatActivity(), onClickedListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//first time the app is launched
if (savedInstanceState == null) {
setCountryFragment()
}
}
private fun setCountryFragment() {
supportFragmentManager.commit {
setReorderingAllowed(true)
add<CountryListFragment>(R.id.fragment_container_view)
}
}
private fun changeFragment(arg: String) {
lateinit var nextFragment: Fragment
val currentFragment: Fragment? =
supportFragmentManager.findFragmentById(R.id.fragment_container_view)
if (currentFragment != null && currentFragment is CountryListFragment) {
nextFragment = CountryStatisticFragment.newInstance(arg)
} else {
nextFragment = CountryListFragment.newInstance()
}
supportFragmentManager.commit {
setReorderingAllowed(true)
replace(R.id.fragment_container_view, nextFragment)
addToBackStack(null)
}
}
override fun onItemClicked(arg: String) {
changeFragment(arg)
}
}
当我按下第二个片段 CountryStatisticFragment 中的按钮时,它会闪烁并停留在同一个片段上。我必须按两次才能转到第一个片段! 要“修复”它,我必须添加以下代码
override fun onBackPressed() {
if(supportFragmentManager.backStackEntryCount > 0) {
supportFragmentManager.popBackStackImmediate()
//this should not be needed, but pressing back one time, when being in CountryStatisticFragment leads to a transition to same fragment, CountryStatisticFragment
super.onBackPressed()
} else {
super.onBackPressed()
}
}
但是感觉这不是正确的处理方式。任何见过类似行为或可以看到我在做什么的人吗?
【问题讨论】:
-
你为什么在
setFragmentA()中打电话给addToBackStack(null)?您添加的第一个片段不应该在后台堆栈中 -
没有帮助!我现在已经删除了。错误仍然存在。该错误仅在从 FragmentB 导航回来时发生,也在一个单独的“项目”上对其进行了测试,两个简单的片段只有一个文本视图在每个片段上工作。然而,在我的实际项目中,两个片段都有一个回收视图,它不起作用。该错误仍然出现。我怀疑这是一个框架问题?
标签: android android-fragments fragment-backstack