material-components-android
material-components-android copied to clipboard
[MaterialSwitch] Crash occurs when calling setThumbTintMode on a switch with a thumb icon
trafficstars
Crash:
java.lang.RuntimeException: Unable to start activity ComponentInfo{***}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable()' on a null object reference
at android.graphics.drawable.LayerDrawable$ChildDrawable.<init>(LayerDrawable.java:968)
at android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:1014)
at android.graphics.drawable.LayerDrawable.createConstantState(LayerDrawable.java:135)
at android.graphics.drawable.LayerDrawable.mutate(LayerDrawable.java:932)
at androidx.core.graphics.drawable.WrappedDrawableApi14.mutate(WrappedDrawableApi14.java:233)
at androidx.appcompat.widget.SwitchCompat.applyThumbTint(SwitchCompat.java:754)
at androidx.appcompat.widget.SwitchCompat.setThumbTintMode(SwitchCompat.java:736)
at com.google.android.material.materialswitch.MaterialSwitch.setThumbTintMode(MaterialSwitch.java:170)
***
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3104)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:524)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1890)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1808)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1751)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2976)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2886)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:263)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:351)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:251)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1220)
at android.app.Activity.performStart(Activity.java:5953)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Source code:
<com.google.android.material.materialswitch.MaterialSwitch
android:id="@+id/adaptive_mode_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:thumbIcon="@drawable/ic_switch_default" />
binding.adaptiveModeSwitch.apply {
thumbTintList = ColorStateList.valueOf(Color.RED)
thumbTintMode = PorterDuff.Mode.MULTIPLY
}
Android API version: 21
Material Library version: 1.11.0
Device: Samsung Galaxy J1
@drchen would you be able to take a look at this issue?
@hunterstich can you help review the linked PR? I think the PR fixes the issue.
Is there any news on a fix for the issue?
Apologies for the delay, this issue has been fixed via the PR linked!