上一个片段在按下后退按钮时显示为空白屏幕(使用多个fragmentTransactions)

时间:2020-01-15 16:08:54

标签: java android android-fragments kotlin transactions

我有一个活动,在平板电脑上同时显示两个片段,在手机上一次显示一个片段。因为我同时为平板电脑和android制作应用程序,所以必须将片段之间的导航功能分离为单独的函数“ displaySecondFragmentOnHandset()”。

在较小的听筒上,当从第一个片段移动到第二个片段然后尝试返回第一个片段时,屏幕空白。

MyActivity:

    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()
     }
    }

问题是当我按“后退”按钮转到第一个片段时,屏幕空白。

2 个答案:

答案 0 :(得分:0)

在CentralActivity中替换

ft !!。replace(R.id.real_container,secondFrag).addToBackStack(“ secondFrag”)。commit()

使用

ft !!。add(R.id.real_container,secondFrag).addToBackStack(“ secondFrag”)。commit()

答案 1 :(得分:0)

解决方案是将fun goToSecondFragment()放在override fun onViewCreated

相关问题