按下后退按钮时,前一个片段显示空白屏幕(使用多个片段事务)
Previous fragment shows blank screen when back button pressed (using multiple fragmentTransactions)
我有一个 activity 可以在平板电脑上同时显示两个片段,在手机上一次显示一个片段。因为我正在为平板电脑和 android 制作应用程序,所以我必须将片段之间的导航功能分离到一个单独的函数中 "displaySecondFragmentOnHandset()"。
在较小的手机上,当从第一个片段移动到第二个片段然后尝试返回到第一个片段时,屏幕是空白的。
我的活动:
class CentralActivity : AppCompatActivity() {
val manager = supportFragmentManager
var firstFrag : FirstFrag? = null
override fun onCreate(savedInstanceState: Bundle?) {
...
var ft: FragmentTransaction = manager.beginTransaction();
firstFrag = FirstFrag.newInstance()
ft.add(R.id.real_container, firstFrag!!, "firstFrag")
if (screenLayoutSize >= Configuration.SCREENLAYOUT_SIZE_LARGE) {
var secondFrag = SecondFrag.newInstance()
ft.add(R.id.real_container, secondFrag, "secondFrag")
}
ft.commit()
}
fun displaySecondFragmentOnHandset (){
var secondFrag = SecondFrag.newInstance()
var ft: FragmentTransaction = manager.beginTransaction();
ft!!.replace(R.id.real_container, secondFrag).addToBackStack("secondFrag").commit()
}
然后在我的 FirstFragemnt 中,如果我使用的是较小的手机,我会这样做:
class FirstFragemnt : Fragment() {
private var viewModel: SharedViewModel? = null
fun goToSecondFragment(){
if (screenLayoutSize!! < Configuration.SCREENLAYOUT_SIZE_LARGE) {
viewModel!!.setMsgInCommunicator(collection)
var centralActivity: CentralActivity = activity as CentralActivity
centralActivity.displaySecondFragmentOnHandset()
}
}
问题是当我按下后退按钮转到第一个片段时,屏幕是空白的。
在 CentralActivity 中替换
ft!!.replace(R.id.real_container, secondFrag).addToBackStack("secondFrag").commit()
和
ft!!.add(R.id.real_container, secondFrag).addToBackStack("secondFrag").commit()
解决方案是将 fun goToSecondFragment()
放在 override fun onViewCreated
中
我有一个 activity 可以在平板电脑上同时显示两个片段,在手机上一次显示一个片段。因为我正在为平板电脑和 android 制作应用程序,所以我必须将片段之间的导航功能分离到一个单独的函数中 "displaySecondFragmentOnHandset()"。
在较小的手机上,当从第一个片段移动到第二个片段然后尝试返回到第一个片段时,屏幕是空白的。
我的活动:
class CentralActivity : AppCompatActivity() {
val manager = supportFragmentManager
var firstFrag : FirstFrag? = null
override fun onCreate(savedInstanceState: Bundle?) {
...
var ft: FragmentTransaction = manager.beginTransaction();
firstFrag = FirstFrag.newInstance()
ft.add(R.id.real_container, firstFrag!!, "firstFrag")
if (screenLayoutSize >= Configuration.SCREENLAYOUT_SIZE_LARGE) {
var secondFrag = SecondFrag.newInstance()
ft.add(R.id.real_container, secondFrag, "secondFrag")
}
ft.commit()
}
fun displaySecondFragmentOnHandset (){
var secondFrag = SecondFrag.newInstance()
var ft: FragmentTransaction = manager.beginTransaction();
ft!!.replace(R.id.real_container, secondFrag).addToBackStack("secondFrag").commit()
}
然后在我的 FirstFragemnt 中,如果我使用的是较小的手机,我会这样做:
class FirstFragemnt : Fragment() {
private var viewModel: SharedViewModel? = null
fun goToSecondFragment(){
if (screenLayoutSize!! < Configuration.SCREENLAYOUT_SIZE_LARGE) {
viewModel!!.setMsgInCommunicator(collection)
var centralActivity: CentralActivity = activity as CentralActivity
centralActivity.displaySecondFragmentOnHandset()
}
}
问题是当我按下后退按钮转到第一个片段时,屏幕是空白的。
在 CentralActivity 中替换
ft!!.replace(R.id.real_container, secondFrag).addToBackStack("secondFrag").commit()
和
ft!!.add(R.id.real_container, secondFrag).addToBackStack("secondFrag").commit()
解决方案是将 fun goToSecondFragment()
放在 override fun onViewCreated