wake-up-neo.net

Fehler beim Aufblasen der Klasse RecyclerView

Mein Code erstellt also einfach eine Liste von CardViews mit RecyclerView. Beim Ausführen meines Codes erhielt ich immer wieder einen seltsamen Fehler, in dem behauptet wurde, es sei ein Fehler in meiner XML-Datei aufgetreten. Nachdem ich für eine Weile gebastelt hatte, fand ich heraus, dass in meiner Layoutdatei alles in Ordnung wäre, wenn ich <RecyclerView> in <Android.support.v7.widget.RecyclerView> ändere. Warum passiert dies? 
Meine Aktivität.

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

}


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

}


Meine Layoutdatei, Anmerkung, <RecyclerView> in <Android.support.v7.widget.RecyclerView> geändert, behebt den Fehler. 

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

Wenn ich mit <RecyclerView> laufe, erhalte ich diese Fehlermeldung. 

`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 ist nicht im Basis-Android-Framework enthalten. Nur Widgets im Basis-Android-Framework (wie ListView, GridView usw.) können im Layout ohne vollständigen Namespace angegeben werden. RecyclerView ist Teil der Bibliothek recyclerview-v7 support.

35
hidro

Sie sollten die RecyclerView auf folgende Weise in XML einfügen:

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

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

Ich hoffe es hilft!

36
Juancho

Ich treffe dieses Problem heute ... und habe es gelöst.

erster Schritt: Behalten Sie die von Ihnen verwendeten Support-Libs in derselben 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'

zweiter Schritt: Sie sollten RecyclerView zu Ihren Proguard-Dateien hinzufügen 

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

Stellen Sie sicher, dass Sie einschließen, bevor Sie RecyclerView zu Ihrem XML hinzufügen.

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

Wenn Sie RecyclerView in XML erstellt haben, bevor Sie diese Abhängigkeiten hinzugefügt haben, sollten Sie Ihre Recycler-Ansicht entfernen (kommentieren), ein Projekt ohne es erstellen und es anschließend wieder hinzufügen. Andernfalls wird in der binären XML-Zeile #n immer noch eine Ausnahme von Inflate angezeigt.

6
Ivan V
  1. Überprüfen Sie die Referenz in build.gradle
  2. Geben Sie in Ihre Layout-XML-Datei den Namen der RecyclerView-Komponente als Ganzes mit einem solchen Paket ein. Android.support.v7.widget.RecyclerViewnot wie RecyclerView

jetzt zum Mittagessen bereit. Gute Wege

0
fatih