异步事件后,片段活动变为空

时间:2014-05-08 16:17:55

标签: android android-fragments xamarin.android xamarin

我正在使用Xamarin。所以它是c#代码。

我有一个片段,它基本上从Web服务中填充车辆信息并将其保存到数据库中。 Web服务异步函数在OnActivityCreated()中调用,填充信息在相应的completedevent中完成。

此片段在进程结束时始终使用FragmentManager.PopBackStack();

当此片段关闭时,此人可以再次打开此片段以保存另一辆车。

每个片段背压都在这里处理:

public override void OnBackPressed()
    {
        FragmentManager.PopBackStackImmediate();
        if (FragmentManager.BackStackEntryCount == 0)
        {
            Finish();
        }
        else
        {
            String tagFrag = FragmentManager.GetBackStackEntryAt(FragmentManager.BackStackEntryCount - 1).Name;
            Fragment previousFrag = FragmentManager.FindFragmentByTag(tagFrag);
            AndroidCommon.ShowFragment(this.FragmentManager, Resource.Id.content_frame, previousFrag, tagFrag);
        }
    }

每个片段SHOW都由此处理:

 public static void ShowFragment(FragmentManager fm, int contentId, Fragment fragToShow, string fragTag)
    {
        String previousFragTag = "";
        Fragment previousFrag = null;
        try
        {
            if (fm.BackStackEntryCount > 0)
            {
                previousFragTag = fm.GetBackStackEntryAt(fm.BackStackEntryCount - 1).Name;
                previousFrag = fm.FindFragmentByTag(previousFragTag);

            }
            if (fragTag != previousFragTag)
            {
                FragmentTransaction fragmentTx;
                fragmentTx = fm.BeginTransaction();
                fragmentTx.AddToBackStack(fragTag);
                fragmentTx.Replace(contentId, fragToShow, fragTag);
                fragmentTx.SetTransition(FragmentTransit.FragmentFade);
                fragmentTx.Commit();
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

第一次显示片段时,所有内容都被罚款,车辆被填充并保存,popbackstack被调用并带来前一个片段。如果该人再次打开相同的片段,我可以看到onAttach和OnCreateView函数有一个活动。

但是,当async方法的完成devent触发(完成)并且我尝试在此方法中使Activity达到峰值时,Activity为Null。

简历中:

  • 打开片段主体(带替换) - >
  • 打开addvehicle片段(带替换) - >
  • 使用popbackstack关闭添加车辆片段 - >
  • 片段主体回来 - >
  • 再次打开addvehicle片段 - >
  • 在OnActivityCreated->
  • 中调用事件
  • OnCompleted事件活动为空

注意:

  1. 我的服务网站是一个静态类,以帮助我分享IOS和 Android项目。
  2. 第一次实例时它完美无缺

1 个答案:

答案 0 :(得分:0)

我发现了问题,似乎我的网络服务的静态全局变量在某些时候失去了它的参考。我想当完成的事件发生时,全局变量似乎没有指向何处,并且不能再引用活动。

解决方案:在片段上实例化#34;每次"需要时。