Исключение нулевой ссылки на менеджер фрагментов - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь перейти к новому фрагменту при нажатии на элемент в моем представлении переработчика:

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

Но возникает следующая ошибка:

Система.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 голосов
/ 18 октября 2018

В начале вы устанавливаете свой фрагмент на ноль, а затем есть три случая, в которых вы даете ему значение, я предполагаю, что вы должны убедиться, что хотя бы один из этих случаев встречается, то есть имя карты на самом деле однослучаев.Это может быть даже опечатка где-то.

Попробуйте добавить оператор по умолчанию и заставить его распечатать что-то, а затем запустить вашу программу, если она действительно распечатывается, это означает, что ни один из случаев не выполняется.

Редактировать: он должен быть в методе начала транзакции, дважды проверять любые нулевые значения внутри него.

...