【问题标题】:Fragment Manager Null Reference Exception片段管理器空引用异常
【发布时间】:2018-10-18 20:00:51
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

尝试添加一个默认语句并让它打印出一些东西然后运行你的程序,如果它打印出来,则意味着没有满足任何情况。

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

【讨论】:

  • 为什么你在 addBackToStack 中使用 null?那是我唯一能看到它出错的地方。你能调试一下,看看是哪一行导致了错误吗?
  • FragmentTransaction fragmentTx = ((AppCompatActivity)Activity).SupportFragmentManager.BeginTransaction(); 就是这一行。
  • 我会检查 BeginTransaction 方法,似乎有一些 null 返回值或其中的对象未正确初始化。
  • 它不是我可以访问的,它是一个 android 库
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多