2015-03-12 9 views
17

Niedawno zaktualizowałem aplikację Android SDK do api 22 i Android Studio 1.1.0. Potem dostaję problemy z renderowaniem na RecyclerView. Oto co ja dostajęProblemy z renderowaniem: java.lang.NullPointerException na Android.support.v7.widget.RecyclerView w Androidzie Studio 1.1.0

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) 

otrzymuję ten wyjątek na XML/podglądu projektu, więc nie jestem w stanie zobaczyć projekt xml.

Projekt działa poprawnie bez żadnych wyjątków. Oto moja widget

<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" 
      /> 

To jest mój kod

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

Jak rozwiązać ten problem?

+0

pisać kod, a nie tylko układ xml – pskink

+2

sam problem dla mnie i rozwiązany! \t Znalazłem ten błąd związany z następującymi trzema: 1, upewnij się, że biblioteka "com.android.support:appcompat" i "com.android.support:recyclerview" są wersją zapisu; 2, usuń właściwość "android: scrollbars"; 3, dodaj układ zarządzający do recycleview w kodzie ur – RoFF

+1

tak. usuwanie Androida: paski przewijania rozwiązały mój problem – IndieBoy

Odpowiedz

31

Mój problem został rozwiązany, gdy wyjąłem tę linię od xml złożyć do RecyclerView:

android:scrollbars="vertical" 

Używam następujące zależności:

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' 
} 

EDYCJA: Korzeń tego problemu został wskazany przez komentujących na temat tego rozwiązania - aby rozwiązać problem, można po prostu upewnić się, że LayoutManager dla RecyclerView jest ustawiony, zanim wyświetli się widok RecyclerView z ustawionym zestawem właściwości scrollbars.

+0

Znalazłem ten błąd związany z następującymi trzema: 1, upewnij się, że biblioteka "com.android.support:appcompat" i "com.android.support:recyclerview" są wersją zapisu; 2, usuń właściwość "android: scrollbars"; 3, dodaj układ zarządzający do recycleview w kodzie ur – RoFF

+8

to nie jest prawdziwe rozwiązanie. Usunięcie czegoś, co programista chce tam być tylko ze względu na niezawieranie, nigdy nie jest rozwiązaniem. Ten błąd występuje, ponieważ jest wyświetlany widok recyclerview, ale nie ustawiono menedżera układu. – mobilepotato7

+1

android: scrollbars działa idealnie – mobilepotato7

11
+0

Już go ustawiłem. Aktualnie pracuję, zmieniając wersję podglądu na api 21 – n1m1

+1

@ n1m1, której nie ustawiłeś poprawnie lub we właściwym miejscu. Sprawdź kod, rozwiązanie, które zaakceptowałeś, nie jest rozwiązaniem. – mobilepotato7

6

Miałem ten sam błąd. Linia 1216 od RecyclerView jest:

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

mLayout jest zerowa w tym czasie jest problem, nie jestem pewien, dlaczego jest zerowa, ale wydaje się, trzeba natychmiast wezwać setLayoutManager() na swojej RecyclerView po setContentView() lub inflate() . Mój kod był uruchomiony wątek w tle, zanim próbowałem uzyskać dostęp do RecyclerView i zadzwonić jego setLayoutManager(). Raz zmieniony Poniżej działa

tj

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

ja nadal nie bardzo rozumiem, dlaczego mam to zrobić chociaż

+0

Ten działa dla mnie. –

+0

Dziękuję. Jest on przetwarzany – user1767260

0

Na wypadek, gdyby ludzie nadal się zastanawiali, należy zaktualizować platformę SDK dla API 22 za pomocą Menedżera SDK i zaktualizować najnowszy widok recyklera, aktualizując repozytorium pomocy technicznej za pomocą Menedżera SDK oraz w pliku build.gradle do najnowszej wersji (22.0.0)

5

nie musisz usunąć linię, ale należy dodać następujący wiersz do kodu:

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

w ten sposób, nie ma problemu dla pionowego przewijania na ekranie RecyclerView.

Mam nadzieję, że pomoże!

0

Właśnie usunięte androida nieruchomości: scrollbars = „vertical” i wszystko będzie dobrze

Powiązane problemy