渲染问题: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的主要内容,如果未能解决你的问题,请参考以下文章