片段交易.替换导致应用程序中的白色(空白?)屏幕

我的应用的流程如下:

主要活动: 家居碎片 ->停电设置碎片 ->停电碎片 ->家居碎片

出于某种原因,当我尝试从BlackoutFragment转到HomeFragment时,MainActivity变为空,并且在我离开应用程序并返回它之前没有任何渲染。左边是HomeFragment通常的样子,右边是当我导航回它时的样子:

http://img4.mukewang.com/6300842b0001235806181277.jpghttp://img4.mukewang.com/6300843500016c8506251284.jpg

我用来设置片段的方法集:


    // Which is invoked like 

    // SetFragment(typeof(HomeFragment), "Home", true, true, false);

    public void SetFragment(Type fragmentType, string fragmentName, bool addToBackStack, bool showNavigationIndicator, bool useSlideAnimation)

    {

        if (fragmentType == typeof(HomeFragment))

            SetFragment(new HomeFragment(), fragmentType, fragmentName, addToBackStack, showNavigationIndicator, useSlideAnimation);

        else if (fragmentType == typeof(BlackoutFragment))

            SetFragment(new BlackoutFragment(), fragmentType, fragmentName, addToBackStack, showNavigationIndicator, useSlideAnimation);

        else if (fragmentType == typeof(BlackoutSetupFragment))

            SetFragment(new BlackoutSetupFragment(), fragmentType, fragmentName, addToBackStack, showNavigationIndicator, useSlideAnimation);

    }


    private void SetFragment(Fragment fragment, Type fragmentType, string fragmentName, bool addToBackStack, bool showNavigationIndicator, bool useSlideAnimation)

    {

        FragmentTransaction transaction = this.FragmentManager.BeginTransaction();


        if (useSlideAnimation)

            transaction.SetCustomAnimations(Resource.Animator.enter_from_left, Resource.Animator.exit_to_right, Resource.Animator.enter_from_right, Resource.Animator.exit_to_left);


        transaction.Replace(Resource.Id.content_main_fragment_layout, fragment, fragmentType.Name);


        if (addToBackStack)

            transaction.AddToBackStack(null);


        transaction.Commit();


        this.FragmentManager.ExecutePendingTransactions();


        if (!string.IsNullOrWhiteSpace(fragmentName))

            SetAppBarTitle(fragmentName);


        if (showNavigationIndicator) _navDrawerToggle.DrawerIndicatorEnabled = true;

        else _navDrawerToggle.DrawerIndicatorEnabled = false;

    }


慕田峪4524236
浏览 104回答 2
2回答

慕神8447489

问题是使用,以便在BlackoutFragment上使用倒计时来更新UI。将其替换为似乎已解决了该问题。我的猜测是,在UI线程上运行的经过的事件“RefreshView”在尝试离开片段时引起了一些趣味。System.Timers.TimerSystem.Threading.Timer所以替换:    public override void OnResume()    {        base.OnResume();        //...        _refreshTimer = new System.Timers.Timer();        _refreshTimer.Interval = 1000;        _refreshTimer.Elapsed += RefreshView;        _refreshTimer.Start();    }    public override void OnPause()     {        base.OnPause();        //...        _refreshTimer.Dispose();    }跟:    public override void OnResume()    {        base.OnResume();        //...        _refreshTimer = new System.Threading.Timer(RefreshView, null, 0, 1000);    }    public override void OnPause()    {        base.OnPause();        //...        _refreshTimer.Dispose();    }解决了我的问题。

九州编程

您不应将初始 Fragment 添加到回堆栈中,因为这将导致它是可逆事务。这意味着如果你的初始状态是“无片段”,并且你为“no fragment”->“HomeFragment”添加到backstack,那么你可以弹出回“no fragment”状态。只需更改对初始片段的调用,使其不会将其添加到回堆栈中。
打开App,查看更多内容
随时随地看视频慕课网APP