渲染问题:java.lang.NullPointerException 在 android.support。v7.widget.RecyclerView 在 Android Studio 1.1.0
Rendering Problems: java.lang.NullPointerException at android.support.v7.widget.RecyclerView in Android Studio 1.1.0
我最近将 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)
I am getting this exception on xml preview/design, so I am not able to
view the xml design.
项目运行良好,没有任何异常。
这是我的小部件
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:layout_width="match_parent"
android:layout_height="0dp"
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());
如何解决这个问题?
您只是忘记设置 LayoutManager:
https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#setLayoutManager(android.support.v7.widget.RecyclerView.LayoutManager)
我也遇到过同样的错误。 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));
我还是不太明白为什么要那样做
当我从 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 属性 设置。
为了防止人们仍然疑惑,您应该通过 SDK 管理器更新到 API 22 的最新 SDK 平台,并通过 SDK 管理器更新支持存储库来更新到最新的回收站视图,并在您的 build.gradle
文件中使用最新版本 (22.0.0)
您无需删除任何行,只需将以下行添加到您的代码中:
recyclerView.setLayoutManager(new LinearLayoutManager(recyclerView.getContext()));
这样RecyclerView的Vertical scrolling就没有问题了
希望对您有所帮助!
我刚刚删除了 属性 android:scrollbars="vertical" 一切都会好的
我最近将 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)
I am getting this exception on xml preview/design, so I am not able to view the xml design.
项目运行良好,没有任何异常。 这是我的小部件
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:layout_width="match_parent"
android:layout_height="0dp"
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());
如何解决这个问题?
您只是忘记设置 LayoutManager: https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#setLayoutManager(android.support.v7.widget.RecyclerView.LayoutManager)
我也遇到过同样的错误。 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));
我还是不太明白为什么要那样做
当我从 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 属性 设置。
为了防止人们仍然疑惑,您应该通过 SDK 管理器更新到 API 22 的最新 SDK 平台,并通过 SDK 管理器更新支持存储库来更新到最新的回收站视图,并在您的 build.gradle
文件中使用最新版本 (22.0.0)
您无需删除任何行,只需将以下行添加到您的代码中:
recyclerView.setLayoutManager(new LinearLayoutManager(recyclerView.getContext()));
这样RecyclerView的Vertical scrolling就没有问题了
希望对您有所帮助!
我刚刚删除了 属性 android:scrollbars="vertical" 一切都会好的