{"record":{"id":"63a84cabb8eb0061","repo":"H07000223/FlycoTabLayout","slug":"viewpager-or-viewpager-adapter-can-not-be-null","errorCode":null,"errorMessage":"ViewPager or ViewPager adapter can not be NULL !","messagePattern":"ViewPager or ViewPager adapter can not be NULL !","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"FlycoTabLayout_Lib/src/main/java/com/flyco/tablayout/SlidingTabLayout.java","lineNumber":175,"sourceCode":"        mDividerPadding = ta.getDimension(R.styleable.SlidingTabLayout_tl_divider_padding, dp2px(12));\n\n        mTextsize = ta.getDimension(R.styleable.SlidingTabLayout_tl_textsize, sp2px(14));\n        mTextSelectColor = ta.getColor(R.styleable.SlidingTabLayout_tl_textSelectColor, Color.parseColor(\"#ffffff\"));\n        mTextUnselectColor = ta.getColor(R.styleable.SlidingTabLayout_tl_textUnselectColor, Color.parseColor(\"#AAffffff\"));\n        mTextBold = ta.getInt(R.styleable.SlidingTabLayout_tl_textBold, TEXT_BOLD_NONE);\n        mTextAllCaps = ta.getBoolean(R.styleable.SlidingTabLayout_tl_textAllCaps, false);\n\n        mTabSpaceEqual = ta.getBoolean(R.styleable.SlidingTabLayout_tl_tab_space_equal, false);\n        mTabWidth = ta.getDimension(R.styleable.SlidingTabLayout_tl_tab_width, dp2px(-1));\n        mTabPadding = ta.getDimension(R.styleable.SlidingTabLayout_tl_tab_padding, mTabSpaceEqual || mTabWidth > 0 ? dp2px(0) : dp2px(20));\n\n        ta.recycle();\n    }\n\n    /** 关联ViewPager */\n    public void setViewPager(ViewPager vp) {\n        if (vp == null || vp.getAdapter() == null) {\n            throw new IllegalStateException(\"ViewPager or ViewPager adapter can not be NULL !\");\n        }\n\n        this.mViewPager = vp;\n\n        this.mViewPager.removeOnPageChangeListener(this);\n        this.mViewPager.addOnPageChangeListener(this);\n        notifyDataSetChanged();\n    }\n\n    /** 关联ViewPager,用于不想在ViewPager适配器中设置titles数据的情况 */\n    public void setViewPager(ViewPager vp, String[] titles) {\n        if (vp == null || vp.getAdapter() == null) {\n            throw new IllegalStateException(\"ViewPager or ViewPager adapter can not be NULL !\");\n        }\n\n        if (titles == null || titles.length == 0) {\n            throw new IllegalStateException(\"Titles can not be EMPTY !\");\n        }","sourceCodeStart":157,"sourceCodeEnd":193,"githubUrl":"https://github.com/H07000223/FlycoTabLayout/blob/528fcffe88d54eeafbc85ffd1ce375df043b3a28/FlycoTabLayout_Lib/src/main/java/com/flyco/tablayout/SlidingTabLayout.java#L157-L193","documentation":"SlidingTabLayout.setViewPager(ViewPager) throws this IllegalStateException when the ViewPager is null or its adapter has not been set yet. The layout reads titles and page count from the ViewPager's adapter, so both must exist before binding.","triggerScenarios":"Calling setViewPager(null); calling setViewPager(vp) on a ViewPager whose setAdapter() has not yet been called; calling before the adapter is attached (e.g. in onViewCreated ordering mistakes).","commonSituations":"Calling setViewPager before setAdapter in an Activity's onCreate/onCreate; ViewPager injected via findViewById returning null due to wrong layout/ID; adapter set later in a fragment lifecycle than the tab binding.","solutions":["Call vp.setAdapter(adapter) before layout.setViewPager(vp).","Ensure findViewById for the ViewPager returns non-null (correct layout inflated, correct ID).","Reorder initialization: inflate layout, create adapter, set adapter on ViewPager, then bind the tab layout.","Catch IllegalStateException if ViewPager binding is optional/deferred in your flow."],"exampleFix":"// before\nslidingTabLayout.setViewPager(viewPager);\nviewPager.setAdapter(adapter);\n// after\nviewPager.setAdapter(adapter);\nslidingTabLayout.setViewPager(viewPager);","handlingStrategy":"validation","validationCode":"if (viewPager != null && viewPager.getAdapter() != null) {\n    slidingTabLayout.setViewPager(viewPager);\n}","typeGuard":"boolean isBindable(ViewPager vp) {\n    return vp != null && vp.getAdapter() != null;\n}","tryCatchPattern":"try {\n    slidingTabLayout.setViewPager(viewPager);\n} catch (IllegalStateException e) {\n    Log.e(\"SlidingTabLayout\", \"ViewPager/adapter missing\", e);\n}","preventionTips":["Always call viewPager.setAdapter() before binding the tab layout.","Follow a fixed init order: inflate views, create adapter, set adapter, bind tabs.","Verify findViewById returns non-null (correct layout and ID).","Bind tabs in onViewCreated/onResume after adapter setup completes."],"tags":["android","viewpager","tablayout","null-check"],"backgroundTag":"null-argument","analyzedSha":"528fcffe88d54eeafbc85ffd1ce375df043b3a28","analyzedAt":"2026-09-08T23:52:16.457Z","contentChangedAt":"2026-09-08T23:52:16.457Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}