android.support.v4.app.getFragmentManager()返回空值?

android.support.v4.app.getFragmentManager()返回空值?,android,android-fragments,android-support-library,Android,Android Fragments,Android Support Library,这是我的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.jav

这是我的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
来源:

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

案例:当您需要从另一个片段(父片段)调用片段(子片段)时


始终在父片段中使用
getChildFragmentManager()
而不是
getFragmentManager()

可以发布导入部分吗?您是否为FragmentTransaction使用了正确的库?我在片段内部调用它。片段内的方法仍然称为getFragmentManager,即使在片段类的支持版本中也是如此。此片段所在的活动是一个片段活动。@YallaT。调用getSupportFragmentManager()而不是getFragmentManager()。在support Fragment类中没有getSupportFragmentManager()方法。当然,我可以使用getActivity().getSupportFragmentManager(),但为什么这里不起作用?请参阅此getSupportFragmentManager()最初在FragmentActivity中定义,但在片段中未提供。。因此,您需要从FragmentActivity中获取它,您可以像下面这样执行getActivity().getSupportFragmentManager()第二个雅拉T.问题。为什么它不起作用?为什么要用getSupportFragmentManager替换此方法?清理或重建时不起作用,但请确保getFragmentManager()是支持库的。检查导入没有任何意义。这不是解决方案!总是有一个人对几乎所有的android问题都给出了相同的解决方案。所以我们可以假设没有添加片段?什么是“isAdded()”。。isAdded的代码在哪里?@GilbertoIbarra
isAdded()
片段的方法。我想您可以使用
getActivity()!=改为null