-2

I already test my apps on API 21+ it's working, but when I try to run on Android version 4.4.4 (KitKat). It's crashed. I already to googling first to find the solution, but didn't find the solution.

This is my log crasher.

09-22 08:58:10.973 3734-3734/co.id.xxx.xx.xxx.debug E/AndroidRuntime: FATAL EXCEPTION: main
    Process: co.id.xxx.xx.xxx.debug, PID: 3734
    android.view.InflateException: Binary XML file line #109: Error inflating class ImageButton
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:714)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:756)
        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:840)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:759)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:759)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
        at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:126)
        at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:95)
        at co.id.xxx.xx.xxx.presentation.base.BaseFragment.onCreateView(BaseFragment.kt:43) // This
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2907)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:488)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1296)
        at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2356)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2101)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2026)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1922)
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:486)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_polis_produk.xml from drawable resource ID #0x7f0800c7 // And this
        at android.content.res.Resources.loadDrawable(Resources.java:2101)
        at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
        at android.view.View.<init>(View.java:3554)
        at android.widget.ImageView.<init>(ImageView.java:123)
        at android.widget.ImageButton.<init>(ImageButton.java:87)
        at androidx.appcompat.widget.AppCompatImageButton.<init>(AppCompatImageButton.java:73)
        at androidx.appcompat.widget.AppCompatImageButton.<init>(AppCompatImageButton.java:69)
        at androidx.appcompat.app.AppCompatViewInflater.createImageButton(AppCompatViewInflater.java:207)
        at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:123)
        at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1407)
        at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1457)
        at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:172)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:756) 
        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:840) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:759) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:759) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
        at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:126) 
        at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:95) 
        at co.id.xxx.xx.xxx.presentation.base.BaseFragment.onCreateView(BaseFragment.kt:43) 
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2907) 
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:488) 
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1296) 
        at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2356) 
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2101) 
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2026) 
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1922) 
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:486) 
        at android.os.Handler.handleCallback(Handler.java:733) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:136) 
        at android.app.ActivityThread.main(ActivityThread.java:5017) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
        at dalvik.system.NativeStart.main(Native Method) 
     Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #1: invalid drawable tag vector
        at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:933)
        at android.graphics.drawable.Drawable.createFromXml(Drawable.java:877)
        at android.content.res.Resources.loadDrawable(Resources.java:2097)
        at android.content.res.TypedArray.getDrawable(TypedArray.java:602) 
        at android.view.View.<init>(View.java:3554) 
        at android.widget.ImageView.<init>(ImageView.java:123) 
        at android.widget.ImageButton.<init>(ImageButton.java:87) 
        at androidx.appcompat.widget.AppCompatImageButton.<init>(AppCompatImageButton.java:73) 
        at androidx.appcompat.widget.AppCompatImageButton.<init>(AppCompatImageButton.java:69) 
        at androidx.appcompat.app.AppCompatViewInflater.createImageButton(AppCompatViewInflater.java:207) 
        at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:123) 
        at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1407) 
        at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1457) 
        at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:172) 
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:756) 
        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:840) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:759) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:759) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
        at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:126) 
        at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:95) 
        at co.id.xxx.xx.xxx.presentation.base.BaseFragment.onCreateView(BaseFragment.kt:43) 
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2907) 
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:488) 
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1296) 
        at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2356) 
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2101) 
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2026) 
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1922) 
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:486) 
        at android.os.Handler.handleCallback(Handler.java:733) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:136) 
        at android.app.ActivityThread.main(ActivityThread.java:5017) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
        at dalvik.system.NativeStart.main(Native Method)

And this is my BaseFragment.kt

abstract class BaseFragment<B : ViewDataBinding, V : ViewModel> : Fragment() {

    @Inject
    lateinit var viewModelFactory: ViewModelProvider.Factory
    private lateinit var mViewDataBinding: B
    private lateinit var mViewModel: V

    val binding: B
        get() = mViewDataBinding
    val vm: V
        get() = mViewModel


    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        mViewModel = ViewModelProvider(this, viewModelFactory).get(getViewModelClass())
        mViewDataBinding =
            DataBindingUtil.inflate(inflater, getLayoutResourceId(), container, false) // BaseFragment.kt:43 is here
        mViewDataBinding.lifecycleOwner = this
        mViewDataBinding.executePendingBindings()
        return mViewDataBinding.root
    }

    @LayoutRes
    abstract fun getLayoutResourceId(): Int

    abstract fun getViewModelClass(): Class<V>

    override fun onAttach(context: Context) {
        AndroidSupportInjection.inject(this)
        super.onAttach(context)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        binding.setVariable(BR.vm, vm)
        binding.setVariable(BR.fragment, this)
    }
}

And this is for res/drawable/ic_polis_produk.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="65.15dp"
    android:height="64.83dp"
    android:viewportWidth="65.15"
    android:viewportHeight="64.83">
  <path
      android:pathData="M20.36,0L44.79,0A20.36,20.36 0,0 1,65.15 20.36L65.15,44.47A20.36,20.36 0,0 1,44.79 64.83L20.36,64.83A20.36,20.36 0,0 1,0 44.47L0,20.36A20.36,20.36 0,0 1,20.36 0z"
      android:fillColor="#29a549"/>
  <path
      android:pathData="M48.35,18.13a5.38,5.38 0,0 0,-4.46 -2.39L29.6,15.74a5.37,5.37 0,0 0,-4.17 2,3.89 3.89,0 0,0 -0.28,0.39 5.33,5.33 0,0 0,-0.91 3v20.84L15.91,41.97v1.79a5.34,5.34 0,0 0,5.34 5.34h0v0h14.3a5.37,5.37 0,0 0,5.36 -5.36v-1.79h0v-19h8.33L49.24,21.1A5.32,5.32 0,0 0,48.35 18.13ZM38.53,21.13v22.63a3,3 0,0 1,-3 3v0a3,3 0,0 1,-3 -3v-1.79h-6L26.53,21.1a3,3 0,0 1,3 -3L39.47,18.1A5.33,5.33 0,0 0,38.53 21.1ZM36.75,25.79L28.41,25.79L28.41,23h8.34ZM36.75,32.04L28.41,32.04L28.41,29.29h8.34ZM36.75,38.29L28.41,38.29v-2.72h8.34Z"
      android:fillColor="#fff"/>
</vector>

And this is for implement ic_polis_produk.xml in my layout.

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

        <import type="android.view.View" />

        ...

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white">

        ...
        
        <ImageButton
            android:id="@+id/btnPemegangPolis"
            android:layout_width="@dimen/menu_width"
            android:layout_height="@dimen/menu_height"
            android:layout_marginTop="32dp"
            android:background="@drawable/ic_polis_produk"
            android:contentDescription="@string/image"
            android:gravity="center"
            android:onClick="@{()->fragment.onButtonPolicyAndProductPressed()}"
            android:padding="8dp"
            app:layout_constraintEnd_toStartOf="@+id/btnTertanggung"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/contentPolicy" />

        ...
        
        <ImageButton
            android:id="@+id/btnBenefitCorporate"
            android:layout_width="@dimen/menu_width"
            android:layout_height="@dimen/menu_height"
            android:layout_marginStart="40dp"
            android:layout_marginTop="32dp"
            android:background="@drawable/ic_polis_produk"
            android:contentDescription="@string/image"
            android:gravity="center"
            android:onClick="@{()->fragment.onBenefitPressed()}"
            android:padding="8dp"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/contentTheInsured" />

        ...
        
    </androidx.constraintlayout.widget.ConstraintLayout>


</layout>
R Rifa Fauzi Komara
  • 1,915
  • 6
  • 27
  • 54
  • Add the code where you setting `ic_polis_produk` icon . Have a look at answers in [This thread](https://stackoverflow.com/questions/35777293/vectordrawablecompat-resourcesnotfoundexception-on-kitkat-and-below). – ADM Sep 22 '20 at 04:19
  • Already add the layout for `ic_polis_produk.xml` icon. – R Rifa Fauzi Komara Sep 22 '20 at 04:24

1 Answers1

1

The problem is you are using android:background here with android:srcCompat it will work . To make it work with android:background below API 21 you can have a layer-list and and add the vector inside layer-list.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_polis_produk"/>
</layer-list>

and then set it to ImageButton background. On other hand i don't use ImageButton very often i think you can just replace it with ImageView and use android:srcCompat it will work and it much easier.

ADM
  • 20,406
  • 11
  • 52
  • 83