Error inflating class RecyclerView

24,255

Solution 1

RecyclerView is not included in base Android framework, only widgets in base Android framework (like ListView, GridView etc) can be specified in layout without full namespace. RecyclerView is part of recyclerview-v7 support library.

Solution 2

You should add the RecyclerView in the XML in this way:

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/cardList">

</android.support.v7.widget.RecyclerView>

Hope it helps!

Solution 3

I meet this problem today. And solved it.

first step:keep the support-libs you used are same version

compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:support-v4:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'

second step:you should add recyclerView to your proguard files

-keep class android.support.v7.widget.** {*;}
// I`ve just keep all widgets

Solution 4

Make sure to include before you add RecyclerView to your XML

compile 'com.android.support:recyclerview-v7:22.2.0'
compile 'com.android.support:appcompat-v7:22.2.0'

If you created RecyclerView in your XML before adding these dependencies, to make it work you should remove (comment) your recycler view, build project without it and then add it back. Otherwise it still shows Inflate exception in binary XML line #n.

Share:
24,255
Liquid Ink
Author by

Liquid Ink

Updated on May 31, 2020

Comments

  • Liquid Ink
    Liquid Ink almost 4 years

    So my code simply makes a list of CardViews using RecyclerView. Upon running my code i kept getting a weird error claiming there was an error in my xml. After tinkering for a while i found out that in my layout file if i change <RecyclerView> to <android.support.v7.widget.RecyclerView> everything would work just fine. Why is this happening?
    My activity.

    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.view.Menu;
    import android.view.MenuItem;
    
    import java.util.ArrayList;
    
    
    public class CardListActivity extends ActionBarActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_card_list);
            RecyclerView recyclerView = (RecyclerView)findViewById(R.id.cardList);
            recyclerView.setHasFixedSize(true);
    
            LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
            linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
            recyclerView.setLayoutManager(linearLayoutManager);
    
            ArrayList<String> list = new ArrayList<>();
            for(int i = 0; i < 20; i++) {list.add("Item " + i);}
            CardListAdapter cardListAdapter = new CardListAdapter(list);
            recyclerView.setAdapter(cardListAdapter);
        }
    
    }
    


    My Adapter

        import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    import java.util.List;
    
    public class CardListAdapter extends RecyclerView.Adapter<CardListAdapter.CardListViewHolder> {
    
        private List<String> list;
    
        public CardListAdapter(List<String> list) {
            this.list = list;
        }
    
        @Override
        public CardListViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_layout,viewGroup,false);
            return new CardListViewHolder(v);
        }
    
        @Override
        public void onBindViewHolder(CardListViewHolder cardListViewHolder, int i) {
            String s = list.get(i);
            cardListViewHolder.title.setText(s);
        }
    
        @Override
        public int getItemCount() {
            return list.size();
        }
    
    
        public static class CardListViewHolder extends RecyclerView.ViewHolder {
            TextView title;
            public CardListViewHolder(View itemView) {
                super(itemView);
                title = (TextView)itemView.findViewById(R.id.title);
            }
        }
    
    }
    


    My layout file, note, changing <RecyclerView> to <android.support.v7.widget.RecyclerView> fixes the error.

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".CardListActivity">
    
    <RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/cardList">
    
        </RecyclerView>
    

    When i run with <RecyclerView> i get this error, .

    `Process: com.liquidink.lollipopmaterialui, PID: 7317
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.liquidink.lollipopmaterialui/com.liquidink.lollipopmaterialui.CardListActivity}: android.view.InflateException: Binary XML file line #8: Error inflating class RecyclerView
                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: android.view.InflateException: Binary XML file line #8: Error inflating class RecyclerView
                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:757)
                at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
                at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
                at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
                at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
                at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
                at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
                at com.liquidink.lollipopmaterialui.CardListActivity.onCreate(CardListActivity.java:18)
                at android.app.Activity.performCreate(Activity.java:5933)
                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
                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.ClassNotFoundException: Didn't find class "android.view.RecyclerView" on path: DexPathList[[zip file "/data/app/com.liquidink.lollipopmaterialui-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
                at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
                at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
                at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
                at android.view.LayoutInflater.createView(LayoutInflater.java:571)
                at android.view.LayoutInflater.onCreateView(LayoutInflater.java:665)
                at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:65)
                at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)
                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
                at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
                at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
                at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
                at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
                at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
                at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
                at com.liquidink.lollipopmaterialui.CardListActivity.onCreate(CardListActivity.java:18)
                at android.app.Activity.performCreate(Activity.java:5933)
                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
                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)
        Suppressed: java.lang.ClassNotFoundException: android.view.RecyclerView
                at java.lang.Class.classForName(Native Method)
                at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
                at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
                at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
                ... 26 more
         Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
    

    `

  • ghostrider
    ghostrider over 8 years
    I am using the eclipse and facing the issue.I have posted my question at:stackoverflow.com/questions/33375943/… I tried your suggestion of first including the library and then the recycler view widget in the XML but I am facing the same issue.Can you please help
  • Mark
    Mark over 7 years
    None of the other solutions, worked, adding the above line to my pro-guard file worked. Might to worth mentioning that if your app works in debug build and then not in release with a recycler view inflation exception, that the above will most certainly be the correct solution as proguard is used on release builds and not debug. Thank you
  • Ilker Baltaci
    Ilker Baltaci over 6 years
    You would still need to add implementation'com.android.support:recyclerview-v7:26.1.0' to your gradle file as @KuRoSan ER. says