没找到类"android.support.v7.widget.RecyclerView

Al *_*ath 10 android android-recyclerview

我在运行时收到此异常:

android.view.InflateException:二进制XML文件行#8:错误膨胀类android.support.v7.widget.RecyclerView
引起:java.lang.ClassNotFoundException:未找到类"android.support.v7.widget.RecyclerView"在路径上:/data/app/my.package.location-1.apk

关于这个错误有一些问题,我从中学到了:
- support.v7在xml和Java代码中准确指定RecyclerView.
- 在Eclipse中,我将这个jar文件作为库添加到项目中:
adt-bundle-windows-x86_64-20140321\sdk\extras\android\support\v7\recyclerview\libs\android-support-v7-recyclerview.jar
-在Eclipse中,导入*adt-bundle-windows-x86_64-20140321\sdk\extras\android\support\v7\recyclelerview*中的现有项目TestActivity,然后将该项目添加到我自己项目的Java Build Path中.

Project Build Target是Android 5.1.1/API 22

一切都没有效果.那里还有什么?

来自MyFragment.java

import android.support.v7.widget.RecyclerView;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
            final Activity thisActivity = getActivity();
            final RecyclerView recyclerView = (RecyclerView)thisActivity.findViewById(R.id.my_listview);

            final List<String> list = Arrays.asList(HEADERS);

            final MyRecyclerAdapter adapter = new MyRecyclerAdapter(list);
            recyclerView.setAdapter(adapter);

}
Run Code Online (Sandbox Code Playgroud)

MyRecyclerAdapter.java

import android.support.v7.widget.RecyclerView;

    public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> {
      private ArrayList<String> mDataset;

      // Provide a suitable constructor (depends on the kind of dataset)
      public MyRecyclerAdapter(List<String> list) {
        mDataset = (ArrayList<String>) list;
      }

      // Create new views (invoked by the layout manager)
      @Override
      public MyRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

          // create a new view
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout, parent, false);
        // set the view's size, margins, paddings and layout parameters
        ViewHolder vh = new ViewHolder(v);
        return vh;
      }

      // Replace the contents of a view (invoked by the layout manager)
      @Override
      public void onBindViewHolder(ViewHolder holder, int position) {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        final String name = mDataset.get(position);
        holder.txtId.setText(mDataset.get(position));
        holder.txtId.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                  remove(name);
                }
            });

        holder.txtType.setText("Footer: " + mDataset.get(position));

      }

      // Return the size of your dataset (invoked by the layout manager)
      @Override
      public int getItemCount() {
        return mDataset.size();
      }
      // Provide a reference to the views for each data item
      // Complex data items may need more than one view per item, and
      // you provide access to all the views for a data item in a view holder

      public class ViewHolder extends RecyclerView.ViewHolder {
        // each data item is just a string in this case
        public TextView txtId;
        public TextView txtType;
        public TextView txtName;

        public ViewHolder(View v) {
          super(v);
          txtId = (TextView) v.findViewById(R.id.id);
          txtType = (TextView) v.findViewById(R.id.type);
          txtName = (TextView) v.findViewById(R.id.name); 
         }
      }

      public void add(int position, String item) {
        mDataset.add(position, item);
        notifyItemInserted(position);
      }

      public void remove(String item) {
        int position = mDataset.indexOf(item);
        mDataset.remove(position);
        notifyItemRemoved(position);
      }

    } 
Run Code Online (Sandbox Code Playgroud)

fragment.xml之

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:background="#000000" >

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

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

row_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/id"
        android:textColor="#FFFFFF"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp" >
    </TextView>

    <TextView
        android:id="@+id/type"
        android:textColor="#FFFFFF"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp" >
    </TextView>

    <TextView
        android:id="@+id/name"
        android:textColor="#FFFFFF"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp" >
    </TextView>

</LinearLayout> 
Run Code Online (Sandbox Code Playgroud)

编辑:根据阿曼卡比尔的建议,我检查了"是图书馆".这确实解决了问题ClassNotFoundException.它确实导致了稍微不同的错误,但这是另一个问题.

android.view.InflateException: Binary XML file line #8: Error inflating class android.support.v7.widget.RecyclerView
    at android.view.LayoutInflater.createView(LayoutInflater.java:613)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
lang.reflect.InvocationTargetException
    at java.lang.reflect.Constructor.constructNative(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
    at android.view.LayoutInflater.createView(LayoutInflater.java:587)
    ... 44 more
Caused by: java.lang.NoClassDefFoundError: android.support.v4.util.Pools$SimplePool
    at android.support.v7.widget.AdapterHelper.<init>(AdapterHelper.java:56)
    at android.support.v7.widget.AdapterHelper.<init>(AdapterHelper.java:71)
    at android.support.v7.widget.RecyclerView.initAdapterManager(RecyclerView.java:455)
    at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:339)
    ... 47 more
Run Code Online (Sandbox Code Playgroud)

Suj*_*mar 23

如果您将Android Studio更新为v-3.4.2

然后从

android.support.v7.widget.RecyclerView
Run Code Online (Sandbox Code Playgroud)

androidx.recyclerview.widget.RecyclerView
Run Code Online (Sandbox Code Playgroud)

这对我有用。


小智 8

在工作区的eclipse中,使用现有代码创建一个新项目,然后在android SDK支持中选择Recycler的路径,在属性中选择编译器google API 20或21并选中Is Library.

之后,在工作区中选择您自己的项目,右键单击属性并转到android部分,在库中单击"添加"按钮,然后从列表中选择您的Recycler项目.

接下来,您必须从项目菜单中清除所有项目.

对不起,如果我的英语是如此糟糕,但它的解决方案,只是通过错误添加suuport v7作为jar,它不像v4.


Amb*_*mar 8

Simple Two Steps:

In stand off

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

Replace with androidx package in xml file as below

<androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical" />

@Ambilpura
Run Code Online (Sandbox Code Playgroud)


小智 5

切换到 Android Studio 是一个更好的选择,但渲染问题仍然存在。

要在 Android Studio 中删除相同的内容,请将“Gradle Dependencies”添加到您的模块中。

 dependencies {
    ...
    compile 'com.android.support:recyclerview-v7:21.0.+'
   }
Run Code Online (Sandbox Code Playgroud)

希望这对某人有所帮助,因为它帮助了我。这是一个很小的变化,但很烦人。