片段管理器空引用异常

时间:2018-10-18 20:00:51

标签: c# android android-fragments xamarin.android fragmentmanager

当我单击“回收者”视图中的某个项目时,我正在尝试转移到新片段:

FragmentTransaction fragmentTx = ((AppCompatActivity)Activity).SupportFragmentManager.BeginTransaction();
            fragmentTx.Replace(Resource.Id.container, fragment);

但是会出现以下错误:

  

System.NullReferenceException:对象引用未设置为对象的实例。

我尝试了很多不同的操作,但是没有用。

我从这里获得了回收站视图的点击:

private void MMainView_Click(object sender, EventArgs e)
{
    int position = mRecyclerView.GetChildAdapterPosition((View)sender);
    int indexPosition = (mFavourites.Count - 1) - position;

    favFragment.TransitionOnCardClick(mFavourites[indexPosition].CalcName);
}

然后在具有回收者视图的片段中调用此方法:

public void TransitionOnCardClick(string cardName)
{
    Fragment fragment = null;

    switch (cardName)
    {
        case "Pace":
            fragment = splitFragment;
            break;

        case "Watts":
            fragment = wattFragment;
            break;

        case "Weight Adjustment":
            fragment = weightFragment;
            break;
    }

    FragmentTransaction fragmentTx = ((AppCompatActivity)Activity).SupportFragmentManager.BeginTransaction();
    fragmentTx.Replace(Resource.Id.container, fragment);
    fragmentTx.AddToBackStack(null);
    fragmentTx.Commit();
}

该如何解决? 我的问题与其他人不同,因为我尝试了许多不同的方法,但仍未找到解决方案。

1 个答案:

答案 0 :(得分:0)

在一开始,您将片段设置为null,然后在三种情况下给它赋予一个值,我想您应该确保满足至少一种情况,即卡名实际上是一个的情况。甚至可能是某个地方的错字。

尝试添加默认语句并使其打印出某些内容,然后运行程序,如果确实打印出,则意味着没有任何情况得到满足。

编辑: 它必须在begin transaction方法中,仔细检查其中是否有空值。