web-dev-qa-db-fra.com

Erreur lors du gonflage de la classe RecyclerView

Donc, mon code fait simplement une liste de CardViews en utilisant RecyclerView. Lors de l'exécution de mon code, j'ai continué à avoir une erreur étrange prétendant qu'il y avait une erreur dans mon xml. Après avoir bricolé quelque temps, j'ai découvert que dans mon fichier de mise en page, si je changeais <RecyclerView> en <Android.support.v7.widget.RecyclerView>, tout fonctionnerait parfaitement. Pourquoi cela arrive-t-il? 
Mon activité.

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);
    }

}


Mon adaptateur 

    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);
        }
    }

}


Mon fichier de mise en page, remarque, changer <RecyclerView> en <Android.support.v7.widget.RecyclerView> corrige l'erreur. 

<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>

Quand je cours avec <RecyclerView> j’obtiens cette erreur,. 

`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

`

28
Liquid Ink

RecyclerView n'est pas inclus dans le cadre Android de base, seuls les widgets du cadre Android de base (tels que ListView, GridView etc.) peuvent être spécifiés dans la présentation sans espace de nom complet. RecyclerView fait partie de recyclerview-v7 support library.

35
hidro

Vous devriez ajouter RecyclerView dans le XML de cette façon:

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

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

J'espère que ça aide!

36
Juancho

Je rencontre ce problème aujourd'hui… et je l'ai résolu.

première étape: garder les bibliothèques de support que vous avez utilisées sont de la même 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'

deuxième étape: vous devez ajouter recyclerView à vos fichiers proguard 

-keep class Android.support.v7.widget.** {*;}
// I`ve just keep all widgets
8
KuRoSan ER.

Assurez-vous d'inclure avant d'ajouter RecyclerView à votre fichier XML

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

Si vous avez créé RecyclerView dans votre fichier XML avant d’ajouter ces dépendances, vous devez supprimer (commenter) votre vue Recycler, construire le projet sans ce dernier, puis le rajouter. Sinon, il y a toujours une exception Inflate dans la ligne XML binaire #n.

6
Ivan V
  1. Vérifier la référence dans build.gradle
  2. Dans votre fichier XML de mise en forme, écrivez le nom de votre composant RecyclerView dans son ensemble avec son paquetage comme celui-ci Android.support.v7.widget.RecyclerViewpas comme RecyclerView

maintenant prêt à déjeuner. Bons sentiers

0
fatih