31

これは私のスタックトレースです:

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();

私の Fragment extends 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

4 に答える 4

83

getFragmentManager()これをこれに置き換えgetSupportFragmentManager()て、アクティビティが拡張されていることを確認してくださいFragmentActivity

于 2013-02-18T10:59:52.267 に答える
4

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;
}
于 2015-09-24T18:44:37.470 に答える
-9

プロジェクトをクリーニングして再構築し、テストデバイスを再起動した後、これはどういうわけか再び機能しました。

于 2013-02-18T11:21:14.120 に答える