2

私はメンバーActivityを持つを持っています。Fragment

には、アクセスFragmentする必要があるいくつかのビュー オブジェクトがありActivityます。そのため、はがいつ終了Activityしたかを知る必要があります。FragmentonCreateView

これを達成するために、 で起動するコールバックを設定しました(これは AFTER と呼ばれ、必要Fragmentなビュー(この場合はボタン) が null にならないことがわかっています)。onActivityCreatedonViewCreatedActivity

@Override
public void onActivityCreated(Bundle savedInstanceState)
{
    super.onActivityCreated(savedInstanceState);

    if (_didLoadCallback != null)
    {
        _didLoadCallback.callback();
    }
}

そして、私Activityはフラグメントを作成し、そのコールバックを設定します:

private void initFragment()
{
    FragmentManager fragmentManager = getFragmentManager();

    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    _fragment = MyFragmentClass.newInstance(new Callbacks.VoidCallback()
    {
        @Override
        public void callback()
        {
            continueInitializationAfterFragmentLoaded();
        }
    });

    fragmentTransaction.add(_root.getId(), _startWorkoutFragment);

    fragmentTransaction.commit();
    fragmentManager.executePendingTransactions();
}

前述のように、このフックが必要な理由は、Activity内のビュー オブジェクトへのアクセスが必要ですFragment

私のFragment中には、ゲッターでアクセスするオブジェクトがあります:

public Button getButton()
{
    return _button;
}

そして、このボタンは で作成されますonCreateView

プログラムを初めて実行したとき、または再実行したとき、これは完全に機能します。ただし、インスタントランをもう一度押すとgetButton、null が返されるため、プログラムがクラッシュします。

さらに混乱を招くのは、オブジェクトが null でないことを確認するためにイベントをログに記録したことです。奇妙なことに、(再実行ではなく) インスタント実行のみでgetButton、最初に呼び出されたときに null 以外を返します (の中onCreateViewFragment)が、へのコールバックを起動するActivityと、getButton呼び出しは突然nullを返します!

D/Log: co.myapp.app.Widgets.Button{84ba583 VE..... ......I. 0,0-0,0} (フラグメントonCreateView)

D/Log: null (ボタンにアクセスしようとした didLoad コールバック後のアクティビティ)

しかし、再実行 (または完全なビルド) を行うと、次のように動作します。

D/Log: co.myapp.app.Widgets.Button{b0b44a0 VE..... ......I. 0,0-0,0} (フラグメントonCreateView)

D/Log: co.myapp.app.Widgets.Button{b0b44a0 VE..... ......I. 0,0-0,0} (ボタンにアクセスしようとした didLoad コールバック後のアクティビティ)

何が起こっているのか分かりますか?それとも、初期化コールバック フックで何が間違っていたのでしょうか?

更新コールバックを起動する前にボタンが null ではないことを確認しても、それでもクラッシュしますか?!

@Override
public void onActivityCreated(Bundle savedInstanceState)
{
    super.onActivityCreated(savedInstanceState);

    if (_didLoadCallback != null && getButton() != null)
    {
        _didLoadCallback.callback();
    }
}
4

0 に答える 0