我正在使用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。
简历中:
注意:
答案 0 :(得分:0)
我发现了问题,似乎我的网络服务的静态全局变量在某些时候失去了它的参考。我想当完成的事件发生时,全局变量似乎没有指向何处,并且不能再引用活动。
解决方案:在片段上实例化#34;每次"需要时。