26

Так что мой код просто делает список карт с помощью RecyclerView. После запуска моего кода я продолжал получать странную ошибку, утверждая, что в моем xml произошла ошибка. Немного поучавшись, я узнал, что в моем файле макета, если я меняю <RecyclerView> на <android.support.v7.widget.RecyclerView>, все будет работать нормально. Почему это происходит?
Моя деятельность.Ошибка раздувания класса RecyclerView

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

} 


Мой адаптер

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

} 


Мой файл макета, обратите внимание, изменение <RecyclerView> в <android.support.v7.widget.RecyclerView> исправляет ошибку.

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

Когда я бегу с <RecyclerView> я получаю эту ошибку,.

`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 

`

ответ

33

RecyclerView не входит в базовую рамках Android, только виджеты в базе рамках Android (как ListView, GridView и т.д.) могут быть указаны в макете без полного пространства имен. RecyclerView является частью библиотеки recyclerview-v7.

4

Убедитесь включить , прежде чем добавить RecyclerView к вашему XML

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

Если вы создали RecyclerView в вашем XML перед добавлением этих зависимостей, чтобы заставить его работать, вы должны удалить (комментарий) Ваше мнение утилизатор, построить проект без него, а затем добавить его обратно. В противном случае он по-прежнему показывает исключение Inflate в двоичной строке XML #n.

+0

Я использую затмение и встает вопрос . Я разместил свой вопрос по адресу: http: //stackoverflow.com/questions/33375943/error-inflating-class-recycler-view? Noredirect = 1 # comment54546208_33375943 Я попробовал сначала ваше предложение, включая библиотеку, а затем просмотр ресайклера виджет в XML, но я столкнулся с той же проблемой. ou, пожалуйста, помогите – ghostrider

32

Вы должны добавить RecyclerView в XML следующим образом:

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

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

Надеется, что это помогает!

+0

. Вам все равно нужно добавить реализацию: «recyclerview-v7: 26.1.0» в ваш файл градиента как @KuRoSan ER. говорит –

8

Я встречаюсь с этой проблемой сегодня. И решил.

первый шаг: держать опорно-ЛИЭС вы использовали такие же версии

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' 

второй шаг: вы должны добавить recyclerView ваших Proguard файлов

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

Ни одно из других решений, сработало, добавив вышеприведенную строку в мой файл pro-guard.Не стоит упоминать, что если ваше приложение работает в отладочной сборке, а затем не в релизе с исключением инфляции в ресайклере, то вышеописанное, безусловно, будет правильным решением, поскольку proguard используется для сборки релизов, а не для отладки. спасибо –

Смежные вопросы