使用Material TabLayout添加条目时Android布局预览消失并抛空指针异常
Material TabLayout添加条目时布局预览崩溃(NullPointerException)解决办法
在使用com.google.android.material:material:1.8.0版本的TabLayout添加条目时,布局预览崩溃并抛出如下NullPointerException:
java.lang.NullPointerException: Cannot invoke "android.content.res.BridgeTypedArray.setTheme(android.content.res.Resources$Theme)" because "ta" is null at android.content.res.Resources_Theme_Delegate.obtainStyledAttributes(Resources_Theme_Delegate.java:74) at android.content.res.Resources$Theme.obtainStyledAttributes(Resources.java:1631) at android.content.Context.obtainStyledAttributes(Context.java:874) at android.widget.TextView.setTextAppearance(TextView.java:3965) at androidx.appcompat.widget.AppCompatTextView.setTextAppearance(AppCompatTextView.java:216) at com.google.android.material.textview.MaterialTextView.setTextAppearance(MaterialTextView.java:106) at android.widget.TextView.setTextAppearance(TextView.java:3954) at androidx.core.widget.TextViewCompat.setTextAppearance(TextViewCompat.java:289) at com.google.android.material.tabs.TabLayout$TabView.updateTab(TabLayout.java:2772) at com.google.android.material.tabs.TabLayout$TabView.update(TabLayout.java:2801) at com.google.android.material.tabs.TabLayout$TabView.setTab(TabLayout.java:2713) at com.google.android.material.tabs.TabLayout.createTabView(TabLayout.java:1673) at com.google.android.material.tabs.TabLayout.newTab(TabLayout.java:956) at com.google.android.material.tabs.TabLayout.addTabFromItemView(TabLayout.java:824) at com.google.android.material.tabs.TabLayout.addViewInternal(TabLayout.java:1730) at com.google.android.material.tabs.TabLayout.addView(TabLayout.java:1720) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:1131) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1101) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:1130) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1101) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088) at android.view.LayoutInflater.inflate(LayoutInflater.java:686) at android.view.LayoutInflater.inflate(LayoutInflater.java:505) at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:353) at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:450) at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:122) at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:727) at com.android.tools.idea.rendering.RenderTask.lambda$inflate$9(RenderTask.java:884) at com.android.tools.idea.rendering.RenderExecutor$runAsyncActionWithTimeout$3.run(RenderExecutor.kt:195) at com.android.tools.idea.rendering.RenderExecutor$PriorityRunnable.run(RenderExecutor.kt:293) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source)
可以尝试以下几种解决方式:
确认App主题继承自MaterialComponents主题:TabLayout依赖Material Design的主题属性,若当前主题未继承自
Theme.MaterialComponents.*系列主题,会导致布局预览时无法正确获取样式属性,进而触发空指针。修改res/values/styles.xml中的主题:<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar"> <!-- 其他主题配置 --> </style>升级Material组件版本:1.8.0版本存在已知的布局预览bug,将依赖升级到1.9.0或更高稳定版本即可修复:
implementation 'com.google.android.material:material:1.9.0'检查TabLayout的自定义样式配置:如果为TabLayout设置了自定义的
tabTextAppearance或其他样式属性,确认引用的资源存在且配置正确,避免因无效资源引用导致获取TypedArray时返回null。清理Android Studio缓存并重启:布局预览缓存异常也可能引发这类问题,通过
File -> Invalidate Caches... -> Invalidate and Restart清理缓存后重试。
内容的提问来源于stack exchange,提问作者Coder Odilov
相关产品推荐
相关产品推荐

