亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

片段交易.替換導致應用程序中的白色(空白?)屏幕

片段交易.替換導致應用程序中的白色(空白?)屏幕

C#
慕田峪4524236 2022-08-20 14:49:57
我的應用的流程如下:主要活動: 家居碎片 ->停電設置碎片 ->停電碎片 ->家居碎片出于某種原因,當我嘗試從BlackoutFragment轉到HomeFragment時,MainActivity變為空,并且在我離開應用程序并返回它之前沒有任何渲染。左邊是HomeFragment通常的樣子,右邊是當我導航回它時的樣子:我用來設置片段的方法集:    // 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;    }
查看完整描述

2 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

問題是使用,以便在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();

    }

解決了我的問題。


查看完整回答
反對 回復 2022-08-20
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

您不應將初始 Fragment 添加到回堆棧中,因為這將導致它是可逆事務。這意味著如果你的初始狀態是“無片段”,并且你為“no fragment”->“HomeFragment”添加到backstack,那么你可以彈出回“no fragment”狀態。

只需更改對初始片段的調用,使其不會將其添加到回堆棧中。


查看完整回答
反對 回復 2022-08-20
  • 2 回答
  • 0 關注
  • 91 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號