片段管理器空引用异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了片段管理器空引用异常相关的知识,希望对你有一定的参考价值。

当我点击我的回收站视图中的项目时,我正在尝试转移到新片段:

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);
}

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

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();
}

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

答案

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

尝试添加一个默认语句并使其打印出来然后运行你的程序,如果它打印出来就意味着没有任何案例得到满足。

编辑:它必须在begin transaction方法中,仔细检查其中的任何空值。

以上是关于片段管理器空引用异常的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio:膨胀类片段时出错

#VSCode保存插件配置并使用 gist 管理代码片段

Android App 在片段中创建 ListView 引用时关闭

片段中的Android致命异常

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

在tablayout片段之间进行通信[重复]