java.lang.IllegalStateException: Fragment does not have a view
2016-11-10 16:30
561 查看
java.lang.IllegalStateException: Fragment does not have a view
先说明下出现这个异常的原因,这是在fragment onCreateView()中调用getChildFragmentManager()的时候出现的。
解决办法就是不要再onCreateView()中调用getChildFragmentManager()。
看下fragment的源码:
这是getChildFragmentManager()
/** * Return a private FragmentManager for placing and managing Fragments * inside of this Fragment. */ final public FragmentManager getChildFragmentManager() { if (mChildFragmentManager == null) { instantiateChildFragmentManager(); if (mState >= RESUMED) { mChildFragmentManager.dispatchResume(); } else if (mState >= STARTED) { mChildFragmentManager.dispatchStart(); } else if (mState >= ACTIVITY_CREATED) { mChildFragmentManager.dispatchActivityCreated(); } else if (mState >= CREATED) { mChildFragmentManager.dispatchCreate(); } } return mChildFragmentManager; }
我们再点击进入instantiateChildFragmentManager()方法中:
void instantiateChildFragmentManager() { mChildFragmentManager = new FragmentManagerImpl(); mChildFragmentManager.attachController(mHost, new FragmentContainer() { @Override @Nullable public View onFindViewById(int id) { if (mView == null) { throw new IllegalStateException("Fragment does not have a view"); } return mView.findViewById(id); } @Override public boolean onHasView() { return (mView != null); } }, this); }
这里可以看到判断了当前的mView是否为null,为null抛出异常。这mView源码的的解释是 :
// The View generated for this fragment. View mView; /** * Get the root view for the fragment's layout (the one returned by {@link #onCreateView}), * if provided. * * @return The fragment's root view, or null if it has no layout. */ @Nullable public View getView() { return mView; }
这个mView是fragment的rootView,它是由onCreateView()方法提供。那么如果你要调用getChildFragmentManager(),那么必须onCreateView之后,view被创建了。
相关文章推荐
- Java.lang.IllegalStateException Activity has been destroyed(Fragment+ViewPage)
- Android java.lang.IllegalStateException: ViewPager has not been bound
- AS 中报错:java.lang.IllegalStateException: ViewPager does not have adapter instance
- java.lang.IllegalStateException: Fragment not attached to Activity异常的一个场景
- java.lang.IllegalStateException: Fragment FragmentRecommendProjects{4be684c} not attached to Activi
- Fragment java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
- java.lang.IllegalStateException: Could not find a method capture(View) in the activity class
- Android java.lang.IllegalStateException: ViewPager has not been bound 的解决办法
- java.lang.IllegalArgumentException: Document base (文件夹路) does not exist or is not a readable directo
- Android Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
- java.lang.IllegalArgumentException: column '_id' does not exist
- java.lang.IllegalStateException: ActionBarContextView can only be used with android:layout_width="
- java.lang.IllegalArgumentException: column 'xxx' does not exist解决方法
- Tomcat的异常 之 java.lang.IllegalArgumentException: Document base *** does not exist or is not a readabl
- java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
- java.lang.SecurityException: Sending SMS message: User 10034 does not have android.permission
- java.lang.IllegalArgumentException: Document base *** does not exist or is not a readable
- java. lang. IllegalArgumentException: Path does not start with a "/" character
- android java.lang.IllegalStateException: System services not available to Activities before onCreate
- java.lang.IllegalStateException The specified child already has a parent. You must call removeView()