Android 即时运行每次都会崩溃,除非调用重新运行(onActivityCreated回调问题)

Android 即时运行每次都会崩溃,除非调用重新运行(onActivityCreated回调问题),android,android-fragments,android-studio,android-lifecycle,android-instant-run,Android,Android Fragments,Android Studio,Android Lifecycle,Android Instant Run,我有一个活动,它有一个片段成员 在片段中我有一些活动需要访问的视图对象。因此,活动需要知道片段的onCreate视图何时完成 为了实现这一点,我设置了一个回调,在片段的onActivityCreated(我知道它在onViewCreated之后调用,当Activity想要查看时,在这种情况下,按钮将不会为null) 在我的活动中创建片段并设置其回调: private void initFragment() { FragmentManager fragmentManager = getFr

我有一个
活动
,它有一个
片段
成员

片段中
我有一些
活动
需要访问的视图对象。因此,
活动
需要知道
片段
onCreate视图
何时完成

为了实现这一点,我设置了一个回调,在
片段
onActivityCreated
(我知道它在
onViewCreated
之后调用,当
Activity
想要查看时,在这种情况下,按钮将不会为null)

在我的
活动中
创建片段并设置其回调:

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();
}
我之所以需要这个钩子,正如前面提到的,
活动
需要访问
片段
中的对象

在我的
片段中
有一个对象,我用getter访问它:

public Button getButton()
{
    return _button;
}
这个按钮是在
onCreateView
中创建的

当我第一次运行该程序或从重新运行时,它工作得非常好。但是,当我再次点击instant run时,程序崩溃,因为
getButton
返回空值

更让我困惑的是,我记录这些事件是为了确保我的对象不是空的,奇怪的是,只有即时运行(而不是重新运行),
getButton
在第一次调用时返回一个NOTNULL(在
片段中的
onCreateView
)但是当它启动对
活动的回调时,
getButton
调用突然返回null

D/Log:co.myapp.app.Widgets.Button{84ba583 V.E………I.0,0-0,0}(Fragment
onCreateView

D/Log:null (didLoad回调尝试访问按钮后的活动)

但是,当我重新运行(或完整构建)时,它仍然有效:

D/Log:co.myapp.app.Widgets.Button{b0b44a0 V.E………I.0,0-0,0} (片段
onCreateView

D/Log:co.myapp.app.Widgets.Button{b0b44a0 V.E………I.0,0-0,0} (didLoad回调尝试访问按钮后的活动)

你知道发生了什么事吗?或者我的初始化回调钩子做错了什么

更新我甚至在启动回调之前验证按钮是否为空,但它仍然崩溃

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

    if (_didLoadCallback != null && getButton() != null)
    {
        _didLoadCallback.callback();
    }
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
    super.onActivityCreated(savedInstanceState);

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