Ответ 1
После очистки и восстановления моего проекта, а также перезагрузки моего тестового устройства, это как-то сработало.
Это моя Stacktrace:
FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.test.fragments.LoadingFragment$1.run(LoadingFragment.java:66)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Линия 66 моего фрагмента:
FragmentTransaction ft = fm.beginTransaction();
fm получается следующим образом:
android.support.v4.app.FragmentManager fm = getFragmentManager();
Мой фрагмент расширяет android.support.v4.app.Fragment
, это мой импорт:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
Я никогда не видел, что у меня есть нуль для FragmentManager, у кого есть идея?
После очистки и восстановления моего проекта, а также перезагрузки моего тестового устройства, это как-то сработало.
Замените этот getFragmentManager()
на этот getSupportFragmentManager()
, а также убедитесь, что ваша активность расширяет FragmentActivity
Из android.support.v4.app.Fragment
source:
// The fragment manager we are associated with. Set as soon as the
// fragment is used in a transaction; cleared after it has been removed
// from all transactions.
FragmentManagerImpl mFragmentManager;
По-видимому getFragmentManager()
возвращает версию поддержки диспетчера фрагментов, но только во время транзакции (или дочернего менеджера фрагментов родительского фрагмента).
Я собираюсь использовать это:
public FragmentManager getHostFragmentManager() {
FragmentManager fm = getFragmentManager();
if (fm == null && isAdded()) {
fm = ((AppCompatActivity)getActivity()).getSupportFragmentManager();
}
return fm;
}
CASE: когда вам нужно вызвать Fragment (дочерний фрагмент) из другого фрагмента (родительского фрагмента)
всегда используйте getChildFragmentManager()
вместо getFragmentManager()
внутри родительского фрагмента.