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>