Невозможно добавить фрагменты с помощью функции расширения Kotlin

У меня есть функция расширения Kotlin для добавления фрагмента, который находится в другом файле Kotlin

fun Fragment.addFragment(tag: String?, id: Int, fragmentManager: FragmentManager) { // will take care of adding the fragment. val fragmentTransaction = fragmentManager.beginTransaction() fragmentTransaction.add(id, this, tag) fragmentTransaction.addToBackStack(tag) fragmentTransaction.commit() } 

Но всякий раз, когда я использую эту функцию расширения для добавления фрагмента, я получаю этот сбой

 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setNextAnim(int)' on a null object reference 

Я использую эту функцию расширения следующим образом:

 MyFragment().addFragment("MyFragment", R.id.frame, fragmentMaganer) 

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

 fragmentTransaction.commit() 

но после этого в методе onStart () моей активности я столкнулся с проблемой NullPointerException

Но если я использую тот же код непосредственно в Activity, как это:

 val myFragment = MyFragment() val fragmentTransaction = fragmentManager.beginTransaction() fragmentTransaction.add(R.id.frame, myFragment, tag) fragmentTransaction.addToBackStack(tag) fragmentTransaction.commit() 

то его работая отлично. Может кто-нибудь объяснить, почему он не работает с функцией расширения ?

У меня также была та же проблема, когда я создал отдельную функцию для создания и завершения фрагментов.

Но когда мое приложение уходило, я не создавал последнюю транзакцию для удаления оставшегося фрагмента.

Я сделал следующее: Перед завершением приложения удалите последний фрагмент, существующий через beginTransaction и commit. И ошибка прекратилась.

Я думаю, что мое решение может дать вам некоторую идею.

По моим сведениям,

fragmentManager . beginTransaction () ;

Начните серию операций редактирования на фрагментах, связанных с этим FragmentManager.

Поэтому вам нужно выполнить эту задачу перед добавлением какого-либо фрагмента.

Чтобы выполнить транзакцию, такую ​​как добавление или удаление фрагмента, вы должны использовать FragmentManager для создания одного FragmentTransaction , который предоставляет API для добавления, удаления, замены и выполнения других транзакций snippet.