我们都知道,当ViewPager
与Fragment
和FragmentPagerAdapter
一起使用时,我们会加载3 Fragment
:可见的一个,并且每个都支持{/ 1}}。
所以,如果我有7 Fragments
并且我正在迭代它们以查看哪三个是加载的那个,我的意思是onCreateView()
已被调用,我该如何判断呢?
编辑:Fragment
不一定是ViewPager
所显示的那个,只是onCreateView()
已被调用。
答案 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()
此时将返回您的活动)。但是,真的,更好地陈述你想要用你的问题完成的事情。