Can't use color statelist in navigationVIew Android kotlin

79 Views Asked by At

I have two project one uses color statelist selector in NavigationView to change the background color of items in Navigation Drawer on different state of interactions.

<com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:itemBackground="@color/nav_bgstate_list"  <------ 
        app:itemIconTint="@color/nav_state_list"  <------
        app:itemTextColor="@color/nav_state_list"  <------
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer"  />

        These three lines causes error but when I remove them, it works fine. 


    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- Item checked -->
        <item android:color="@color/brand" android:state_checked="true" />
        <!-- Item pressed -->
        <item android:color="@color/black" android:state_pressed="true" />
        <!-- Item default -->
        <item android:color="@color/brand70" />
    </selector>



I copied the same code into another project and it started throwing bunch of errors. The log is below

    2021-06-09 07:49:13.564 12895-12895/ca.company.project.betaversion E/AndroidRuntime: FATAL EXCEPTION: main
        Process: ca.company.project.betaversion, PID: 12895
        java.lang.RuntimeException: Unable to start activity ComponentInfo{ca.company.project.betaversion/ca.company.project.betaversion.MainActivity}: android.view.InflateException: Binary XML file line #26: Binary XML file line #26: Error inflating class com.google.android.material.navigation.NavigationView
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2781)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2859)
            at android.app.ActivityThread.-wrap11(Unknown Source:0)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1592)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:164)
            at android.app.ActivityThread.main(ActivityThread.java:6518)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
         Caused by: android.view.InflateException: Binary XML file line #26: Binary XML file line #26: Error inflating class com.google.android.material.navigation.NavigationView
         Caused by: android.view.InflateException: Binary XML file line #26: Error inflating class com.google.android.material.navigation.NavigationView
         Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Constructor.newInstance0(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
            at android.view.LayoutInflater.createView(LayoutInflater.java:647)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
            at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
            at ca.company.project.betaversion.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:57)
            at ca.company.project.betaversion.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:51)
            at ca.company.project.betaversion.MainActivity.onCreate(MainActivity.kt:111)
            at android.app.Activity.performCreate(Activity.java:7023)
            at android.app.Activity.performCreate(Activity.java:7014)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2734)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2859)
            at android.app.ActivityThread.-wrap11(Unknown Source:0)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1592)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:164)
            at android.app.ActivityThread.main(ActivityThread.java:6518)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
         Caused by: android.content.res.Resources$NotFoundException: Drawable ca.company.project.betaversion:color/nav_bgstate_list with resource ID #0x7f0600d9
         Caused by: android.content.res.Resources$NotFoundException: File res/color/nav_bgstate_list.xml from drawable resource ID #0x7f0600d9
            at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:820)
            at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:630)
            at android.content.res.Resources.getDrawableForDensity(Resources.java:877)
            at android.content.res.Resources.getDrawable(Resources.java:819)
            at android.content.Context.getDrawable(Context.java:605)
            at androidx.core.content.ContextCompat.getDrawable(ContextCompat.java:455)
            at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:147)
            at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:135)
    2021-06-09 07:49:13.569 12895-12895/ca.company.project.betaversion E/AndroidRuntime:     at androidx.appcompat.content.res.AppCompatResources.getDrawable(AppCompatResources.java:104)
            at androidx.appcompat.widget.TintTypedArray.getDrawable(TintTypedArray.java:83)
            at com.google.android.material.navigation.NavigationView.<init>(NavigationView.java:196)
            at com.google.android.material.navigation.NavigationView.<init>(NavigationView.java:122)
            at java.lang.reflect.Constructor.newInstance0(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
            at android.view.LayoutInflater.createView(LayoutInflater.java:647)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
            at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
            at ca.company.project.betaversion.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:57)
            at ca.company.project.betaversion.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:51)
            at ca.company.project.betaversion.MainActivity.onCreate(MainActivity.kt:111)
            at android.app.Activity.performCreate(Activity.java:7023)
            at android.app.Activity.performCreate(Activity.java:7014)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2734)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2859)
            at android.app.ActivityThread.-wrap11(Unknown Source:0)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1592)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:164)
            at android.app.ActivityThread.main(ActivityThread.java:6518)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
         Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #4: <item> tag requires a 'drawable' attribute or child tag defining a drawable
            at android.graphics.drawable.StateListDrawable.inflateChildElements(StateListDrawable.java:189)
            at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:122)
            at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:142)
            at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1295)
            at android.graphics.drawable.Drawable.createFromXmlForDensity(Drawable.java:1254)
            at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:807)
                ... 36 more



I checked minSdk version, compilied sdk version, themes, gradle version, dependencies with their versions etc. and everything is same, nothing is different. I know I should be using drawable states instead of color state but I don't understand why it is working in other project but in the another one.

Edit 1

I found out that the crash was happening because of I set the itembackground with color state selector. itemIconTint and itemTextColor works fine with color state selectors. Only itemBackground crashes whenever I try to set the state selector there so I found one solution mentioned here, basically I need to add checked android:checkable="true" but even after adding this it crashed. I don't know why.

Edit 2

So I realized color state selector is working on newer version of android > 10 but not on the older version of android.

0

There are 0 best solutions below