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

时间:2016-06-01 00:57:17

标签: android android-fragments android-studio android-lifecycle android-instant-run

我的Activity成员Fragment

Fragment我有一些Activity需要访问的视图对象。因此,Activity需要知道Fragment的{​​{1}}何时完成。

为了实现这一点,我设置了一个回调,以便在onCreateView的{​​{1}}(我知道称为Fragment之后以及onActivityCreated想要的视图时触发,在这种情况下,按钮不会为空。)

onViewCreated

在我的Activity我创建了片段并设置了它的回调:

@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中,我有一个使用getter访问的对象:

Fragment

此按钮在Fragment

中创建

当我第一次运行程序或重新运行程序时,这非常有效。但是,当我再次点击即时运行时,程序崩溃,因为public Button getButton() { return _button; } 返回空值。

进一步增加了我的困惑是我记录了事件以确保我的对象不为空,奇怪的是,仅使用即时运行(没有重新运行),onCreateView返回一个第一次调用时(getButton中的getButton)不会为空,但是当它触发onCreateView的回调时,Fragment调用会突然返回null! / p>

  

D / Log:co.myapp.app.Widgets.Button {84ba583 V.E ...... ......我。 0,0-0,0}(片段Activity

     

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

但是当我重新运行(或完整版)时,它可以工作:

  

D / Log:co.myapp.app.Widgets.Button {b0b44a0 V.E ...... ......我。 0,0-0,0}   (片段getButton

     

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

你有什么想法吗?或者也许我的初始化回调挂钩做错了什么?

更新我甚至在启动回调之前验证按钮是否为空并且它仍然崩溃了?!

onCreateView

0 个答案:

没有答案