android.support.v4.app.getFragmentManager()返回null?

时间:2013-02-18 10:56:35

标签: 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.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();

My Fragment扩展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得到null任何人都有想法?

4 个答案:

答案 0 :(得分:83)

将此getFragmentManager()替换为此getSupportFragmentManager(),并确保您的活动延伸FragmentActivity

答案 1 :(得分:2)

来自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;
}

答案 2 :(得分:0)

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

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

答案 3 :(得分:-7)

在清理和重建我的项目以及重新启动我的测试设备之后,这又以某种方式再次起作用。