渲染问题:Android Studio 1.1.0 中 android.support.v7.widget.RecyclerView 的 java.lang.NullPointerException

Posted

技术标签:

【中文标题】渲染问题:Android Studio 1.1.0 中 android.support.v7.widget.RecyclerView 的 java.lang.NullPointerException【英文标题】:Rendering Problems: java.lang.NullPointerException at android.support.v7.widget.RecyclerView in Android Studio 1.1.0 【发布时间】:2015-05-14 08:46:32 【问题描述】:

我最近将 android sdk 更新为 api 22 和 android studio 1.1.0。之后,我在 RecyclerView 上遇到了渲染问题。这就是我得到的

  java.lang.NullPointerException
at android.support.v7.widget.RecyclerView.computeVerticalScrollRange(RecyclerView.java:1216)
at android.view.View.onDrawScrollBars(View.java:12943)
at android.view.View.draw(View.java:15237)
at android.support.v7.widget.RecyclerView.draw(RecyclerView.java:2440)
at android.view.View.draw(View.java:15140)
at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3405)
at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:53)
at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
at android.view.View.draw(View.java:15138)
at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3405)
at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:53)
at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
at android.view.View.draw(View.java:15234)
at android.view.View.draw(View.java:15140)
at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3405)
at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:53)
at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
at android.support.v4.widget.DrawerLayout.drawChild(DrawerLayout.java:1086)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
at android.view.View.draw(View.java:15138)
at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3405)
at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:53)
at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
at android.view.View.draw(View.java:15138)
at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3405)
at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:53)
at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
at android.view.View.draw(View.java:15234)
at android.view.View.draw(View.java:15140)
at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3405)
at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:53)
at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
at android.view.View.draw(View.java:15234)

我在 xml 预览/设计中遇到了这个异常,所以我不能 查看 xml 设计。

该项目运行良好,没有任何异常。 这是我的小部件

 <android.support.v7.widget.RecyclerView
            android:id="@+id/my_recycler_view"
            android:layout_
            android:layout_
            android:layout_weight="8"
            android:layout_gravity="center"
            android:gravity="center"
            android:scrollbars="vertical"
            android:fadeScrollbars="false"
            />

这是我的代码

    recyclerView= (RecyclerView) findViewById(R.id.my_recycler_view);
    layoutManager=new GridLayoutManager(this,2);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);
    recyclerView.setItemAnimator(new DefaultItemAnimator());

如何解决这个问题?

【问题讨论】:

发布您的代码,而不仅仅是布局 xml 对我来说同样的问题并解决了!我发现这个错误与以下三个有关:1,确保库“com.android.support:appcompat”和“com.android.support:recyclerview”是保存版本; 2,删除属性“android:scrollbars”; 3,在你的代码中添加layoutmanager到recycleview 是的。删除 android:scrollbars 解决了我的问题 【参考方案1】:

当我从 RecyclerView 的 xml 文件中取出这一行时,我的问题就解决了:

android:scrollbars="vertical"

我正在使用以下依赖项:

dependencies 
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.android.support:recyclerview-v7:22.0.0'
    compile 'com.android.support:cardview-v7:22.0.0'

编辑:此解决方案的评论员指出了此问题的根源 - 要解决此问题,您只需确保在显示带有滚动条属性集的 RecyclerView 之前设置 RecyclerView 的 LayoutManager。

【讨论】:

我发现这个错误与以下三个有关:1,确保库“com.android.support:appcompat”和“com.android.support:recyclerview”是保存版本; 2,删除属性“android:scrollbars”; 3,在你的代码中添加layoutmanager到recycleview 这不是一个真正的解决方案。为了不崩溃而删除开发人员想要在那里的东西永远不是解决方案。发生此错误是因为正在显示 recyclerview 但未设置布局管理器。 @androidpotato7 你的解决方案解决了它,你说的有道理!【参考方案2】:

您只是忘记设置 LayoutManager: https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#setLayoutManager(android.support.v7.widget.RecyclerView.LayoutManager)

【讨论】:

我已经设置好了。目前我正在通过将预览版本更改为 api 21 @n1m1 你没有正确或在正确的地方设置它。检查您的代码,您接受的解决方案是没有解决方案。【参考方案3】:

我也遇到了同样的错误。 RecyclerView 的第 1216 行是:

return mLayout.canScrollVertically() ? mLayout.computeVerticalScrollRange(mState) : 0;

mLayout 当时为 null 是问题所在,我不确定它为什么为 null,但看来您必须在 setContentView()inflate() 之后立即在 RecyclerView 上调用 setLayoutManager()。在我尝试访问 RecyclerView 并调用它的setLayoutManager() 之前,我的代码正在运行一个后台线程。一旦我更改为以下内容,它就可以工作了

this.setContentView(R.layout.schedule);
rv = (RecyclerView) this.findViewById(R.id.schedule_listview);
rv.setLayoutManager(new LinearLayoutManager(this));

我还是不太明白为什么要这么做

【讨论】:

【参考方案4】:

您不需要删除任何行,只需将以下行添加到您的代码中:

recyclerView.setLayoutManager(new LinearLayoutManager(recyclerView.getContext()));

这样在RecyclerView上垂直滚动就没有问题了。

希望对你有帮助!

【讨论】:

【参考方案5】:

以防万一人们仍然想知道,您应该通过 SDK 管理器更新到 API 22 的最新 SDK 平台,并通过 SDK 管理器更新支持存储库并在您的 build.gradle 中更新到最新的回收器视图文件以使用最新版本 (22.0.0)

【讨论】:

【参考方案6】:

我刚刚删除了属性 android:scrollbars="vertical" 一切都会好起来的

【讨论】:

以上是关于渲染问题:Android Studio 1.1.0 中 android.support.v7.widget.RecyclerView 的 java.lang.NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 中的渲染器错误

android studio 渲染和在模拟器上渲染的区别

Android Studio 不渲染布局

Android Studio 中导航抽屉预览中的渲染问题

由于 Android Studio 中的折叠工具栏导致的渲染问题

如何使用 openGL 在 android studio 中渲染 .dae(collada) 文件