没有找到类“android.support.v7.widget.RecyclerView

Posted

技术标签:

【中文标题】没有找到类“android.support.v7.widget.RecyclerView【英文标题】:Didn't find class "android.support.v7.widget.RecyclerView 【发布时间】:2015-04-17 21:23:07 【问题描述】:

我在运行时遇到了这个异常:

android.view.InflateException: Binary XML file line #8: Error inflating class android.support.v7.widget.RecyclerView原因:java.lang.ClassNotFoundException: 在路径上找不到类“android.support.v7.widget.RecyclerView”:/data/app/my.package.location-1.apk

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

项目构建目标是 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);


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

     

片段.xml

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

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

</RelativeLayout>

row_layout.xml

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

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

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

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

</LinearLayout> 

编辑:按照Arman Kabir 的建议,我检查了“Is Library”。这确实修复了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

【问题讨论】:

切换到 Android Studio。 这如何解决问题? 【参考方案1】:

如果您将 android studio 更新到 v-3.4.2

然后改变

android.support.v7.widget.RecyclerView

androidx.recyclerview.widget.RecyclerView

这对我有用。

【讨论】:

我喜欢这些答案。多亏了你,我花了 15 秒而不是 1 小时解决问题。【参考方案2】:

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

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

接下来你必须从项目菜单中清理所有项目。

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

【讨论】:

【参考方案3】:
Simple Two Steps:

In stand off

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

Replace with androidx package in xml file as below

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

@Ambilpura

【讨论】:

【参考方案4】:

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

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

 dependencies 
    ...
    compile 'com.android.support:recyclerview-v7:21.0.+'
   

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

【讨论】:

【参考方案5】:

如果你不知道哪个 jar 文件包含你正在寻找的类,你可以使用这个 bash 命令。在 Windows 上,安装 Cygwin 即可运行。

对于我在find . -name \*.jar ;回声 $i; jar tvf $i | fgrep $*;完成

这应该在子目录中搜索并帮助您找到丢失的 jar 文件。

【讨论】:

【参考方案6】:

这是我完成 mqtt 项目的 eclipse 之旅。

首先,你必须检查支持库是否存在,如果没有,你必须使用 sdk manager 下载它。

我知道你已经有了那个库。 只需检查支持库所在的目录即可。 您确定图片上存在四个目录。

在你的情况下, 你将拥有两个核心库 appcompat-v7 和 support-v4 至少都是 22 或更高版本。

每个文件夹中必须有一个 aar 文件。您必须将后缀aar更改为zip,然后将其解压缩到该文件夹​​下。将 classes.jar 重命名为 appcompat-v7-22.1.0.jar 和 support-v4-22.1.0.jar。

这意味着您已准备好将它们复制到项目中正确的 libs 文件夹中。

您对两个文件夹执行相同的操作。

在 recyclerview-v7\21.0.0 文件夹中,您可以将 classes.jar 重命名为您想要的任何名称,并将 support-annotations-21.0.0.jar 重命名为 support-annotations\21.0.0\ 下的任何名称,然后复制将它们放到项目的 libs 文件夹中。

将现有的android项目导入你的eclipse,

另外,对 support-v4-22.1.0 库做同样的事情。

不要忘记选中复选框 - '是图书馆'

您最终可以为您的项目设置所有配置,如下图所示。

这是我的 project.properties 文件。

target=android-21

java.target=1.7
java.source=1.7

android.library.reference.1=..\\MqttService
android.library.reference.2=..\\extras\\android\\m2repository\\com\\android\\support\\appcompat-v7\\22.1.0\\appcompat-v7-22.1.0
android.library.reference.3=..\\extras\\android\\m2repository\\com\\android\\support\\support-v4\\22.1.0\\support-v4-22.1.0

【讨论】:

【参考方案7】:

实现'com.google.android.material:material:1.4.0-alpha02'

如果你的依赖列表中有这个,你应该删除这个和任何其他与回收视图相关的依赖并同步 Gradle。

并添加这两个依赖项。

实现'com.android.support:appcompat-v7:21.0.3'

实现'com.android.support:recyclerview-v7:21.0.0'

【讨论】:

以上是关于没有找到类“android.support.v7.widget.RecyclerView的主要内容,如果未能解决你的问题,请参考以下文章

膨胀类 android.support.v7.app.MediaRouteButton 时出错

eclipse导入v7包没有AppCompatActivity这个类

找不到类 'android.support.v7.widget.SearchView$5'

膨胀类 android.support.v7.widget.RecyclerView(Eclipse) 时出错

膨胀类 android.support.v7.widget.CardView 时出错

找不到以下类:android.support.v7.internal.app.WindowDecorActionBar