Проблемы с рендерингом: java.lang.NullPointerException в android.support.v7.widget.RecyclerView в 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)
Я получаю это исключение в xml preview/design, поэтому я не могу просмотрите проект xml.
Проект отлично работает без каких-либо исключений.
Вот мой виджет
<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());
Как решить эту проблему?
Ответы
Ответ 1
Моя проблема была решена, когда я вынул эту строку из xml файла для RecyclerView:
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'
}
EDIT: корень этой проблемы был отмечен комментаторами этого решения. Чтобы решить эту проблему, вы можете просто убедиться, что LayoutManager для RecyclerView установлен перед отображением RecyclerView с набором свойств прокрутки.
Ответ 2
Вы просто забыли установить LayoutManager:
https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#setLayoutManager(android.support.v7.widget.RecyclerView.LayoutManager)
Ответ 3
У меня была такая же ошибка. строка 1216 RecyclerView:
return mLayout.canScrollVertically() ? mLayout.computeVerticalScrollRange(mState) : 0;
mLayout, являющееся нулевым в данный момент, является проблемой, я не уверен, почему это null, но, похоже, вам нужно вызвать setLayoutManager() в RecyclerView сразу после setContentView()
или inflate()
. Мой код запускал фоновый поток, прежде чем попытался получить доступ к 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 Manager и обновить до последнего вида ресайзера, обновив репозиторий поддержки через SDK Manager и в своем build.gradle
файла для использования последней версии (22.0.0)
Ответ 6
я просто удалил свойство android: scrollbars = "vertical", и все будет хорошо