如何知道片段是否已经调用onCreateView()

时间:2014-05-22 13:53:37

标签: android android-fragments

我们都知道,当ViewPagerFragmentFragmentPagerAdapter一起使用时,我们会加载3 Fragment:可见的一个,并且每个都支持{/ 1}}。

所以,如果我有7 Fragments并且我正在迭代它们以查看哪三个是加载的那个,我的意思是onCreateView()已被调用,我该如何判断呢?

编辑Fragment不一定是ViewPager所显示的那个,只是onCreateView()已被调用。

4 个答案:

答案 0 :(得分:14)

从逻辑上讲,如果调用onCreateView,这将是一个合理的测试:

myFragment.getView() != null;

假设您有一个对寻呼机迭代中所有片段的引用,并检查它们是否有视图。

http://developer.android.com/reference/android/app/Fragment.html#getView()

<强>更新

上面的答案假定您的片段始终创建视图,而不是无视片段。如果是,那么我建议对片段进行子类化,如下所示:

public abstract class SubFragment extends Fragment
{
    protected boolean onCreateViewCalled = false;

    public boolean hasOnCreateViewBeenCalled()
    {
        return onCreateViewCalled;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup Container, Bundle state){
        onCreateViewCalled = true;
        return null;
    }
}

请记住,如果他们覆盖onCreateView,则其他子类必须调用super或自己设置标志。

答案 1 :(得分:3)

我为Fragment添加了一个接口。看起来像:

protected OnCreateViewCallback createViewCallback = null;

public void setCreateViewCallback(OnCreateViewCallback createViewCallback) {
    this.createViewCallback = createViewCallback;
}

public interface OnCreateViewCallback {

    void onCreateView();

}

在我的onCreateView()中:

    //initialize your view.
    if (createViewCallback != null) {
        createViewCallback.onCreateView();
        createViewCallback = null;
    }
    return mainView;

从我的活动:

        if (ocrFragment.getView() == null) {
            ocrFragment.setCreateViewCallback(new MainScreenFragment.OnCreateViewCallback() {
                @Override
                public void onCreateView() {
                    ocrFragment.ocrImage(picture, false);
                }
            });
        } else {
            ocrFragment.ocrImage(picture, false);
        }

答案 2 :(得分:0)

如果在调用onCreateView之后尝试执行某些操作,请使用onViewCreated:

  

在onCreateView(LayoutInflater,ViewGroup,   Bundle)已返回,但在还原任何保存状态之前   到视图。这使子类有机会初始化自己   一旦他们知道他们的视图层次结构已经完全创建。的   但是,片段的视图层次结构未附加到其父级   这一点。

public void onViewCreated(View view, Bundle savedInstanceState) {
       MyActivity myActivity = (MyActivity) getActivity();
       MyActivity.newAsyncTask(mPar);
}

答案 3 :(得分:-3)

您还可以检查Fragment.isVisible(),因为当片段处于​​ViewPager的屏幕外页面限制时,片段处于可见状态。

编辑:但这实际上取决于你真正想要用你的问题实现的目标。也许在他们的UI准备就绪时,片段中的所有UI都会有某种更新?

编辑:

再添一次,你可以听onViewCreated()并设置一个标志。或者通知您的活动并做进一步的工作(getActivity()此时将返回您的活动)。但是,真的,更好地陈述你想要用你的问题完成的事情。