2

我有Activity一个Fragment成员。

Fragment我有一些Activity需要访问的视图对象。因此,Activity需要知道Fragment's何时onCreateView完成。

为了实现这一点,我设置了一个回调以在Fragment's中触发onActivityCreated(我知道它被称为 AFTERonViewCreated并且当视图需要时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需要访问Fragment.

在我的Fragment我有一个我用吸气剂访问的对象:

public Button getButton()
{
    return _button;
}

而这个按钮是在onCreateView.

当我第一次运行程序或重新运行程序时,这非常有效。getButton但是,当我再次点击即时运行时,程序会因为返回 null而崩溃。

进一步增加我的困惑是我记录了事件以确保我的对象不为空,而且奇怪的是,仅使用即时运行(而不是重新运行),getButton第一次调用时返回非空(在) 但是当它触发对 的回调时onCreateView,调用突然返回 null!FragmentActivitygetButton

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 回调尝试访问按钮后的活动)

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

更新我什至在触发回调之前验证按钮不为空,它仍然崩溃?!

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

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

0 回答 0