Saya mencoba mengacaukan RecyclerView baru dan setiap kali saya mencoba menjalankannya, aplikasi saya langsung macet. Ini memberi saya NullPointerException karena mencoba mengakses metode dari android.support.v7.widget.RecyclerView
. Saya telah melihat posting lain dan melihat bahwa kebanyakan orang tidak memilikinya compile 'com.android.support:recyclerview-v7:+'
tetapi saya mencobanya dan itu tidak membantu sama sekali. Tidak begitu yakin apa yang harus dilakukan saat ini, bantuan apa pun akan dihargai. Berikut log kesalahannya: (Saya akan memposting gambar tetapi saya belum memiliki 10 repetisi)
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView$LayoutManager.onMeasure(android.support.v7.widget.RecyclerView$Recycler, android.support.v7.widget.RecyclerView$State, int, int)' on a null object reference
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:1764)
at android.view.View.measure(View.java:17430)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17430)
at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:851)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560)
at android.view.View.measure(View.java:17430)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5786)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
onCreateView
apa yang Anda hapus / hancurkan / batalkan pendaftaran dionDestroyView
... Harus mengikuti siklus hidup itu!Jawaban:
Masalah ini biasanya terjadi jika tidak
LayoutManager
disediakan untukRecyclerView
. Anda bisa melakukannya seperti ini:final LinearLayoutManager layoutManager = new LinearLayoutManager(context); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setLayoutManager(layoutManager);
sumber
final
, itulah mengapa saya mendeklarasikannya difinal
sini.Dalam kasus saya, itu tidak terkait dengan 'final', tetapi ke masalah yang disebutkan dalam komentar @ NemanjaKovačević ke jawaban @aga. Saya menyetel layoutManager pada pemuatan data dan itu adalah penyebab error yang sama. Setelah memindahkan penyiapan layoutManager ke onCreateView dari fragmen saya, masalah telah diperbaiki.
Sesuatu seperti ini:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recycler); mLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL); mRecyclerView.setLayoutManager(mLayoutManager);
sumber
LayoutManager
itu tidak disediakan , itu saja. Anda dapat membuat variabel mengarah keLayoutManager
final, atau bukan final - itu tidak mengubah apa pun.Bagi saya, saya mengalami masalah yang sama, masalahnya adalah ada RecyclerView yang tidak digunakan di xml dengan tampilan hilang tetapi saya tidak mengikatnya ke adaptor apa pun dalam Aktivitas, oleh karena itu masalahnya. Itu diselesaikan segera setelah saya menghapus tampilan pendaur ulang yang tidak digunakan di xml
yaitu - Saya menghapus tampilan ini karena ini tidak disebut dalam kode atau adaptor apa pun telah disetel
<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rv_profileview_allactivities" android:visibility="gone" />
sumber
Saya mengalami crash ini meskipun saya telah
RecyclerView.LayoutManager
mengatur dengan benar. Saya harus memindahkanRecyclerView
kode inisialisasi keonViewCreated(...)
callback untuk memperbaiki masalah ini.@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_listing, container, false); rootView.setTag(TAG); return inflater.inflate(R.layout.fragment_listing, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mLayoutManager = new LinearLayoutManager(getActivity()); mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); mRecyclerView.setItemAnimator(new DefaultItemAnimator()); mRecyclerView.setLayoutManager(mLayoutManager); mAdapter = new ListingAdapter(mListing); mRecyclerView.setAdapter(mAdapter); }
sumber
RecyclerView
kode inisialisasi ke dalamonViewCreated(...)
pekerjaanAnda perlu menggunakan
setLayoutManager
dalamRecyclerView#onCreate()
metode. Sebelum menambahkanrecyclerView
ke tampilan, itu harus memilikiLayoutManager
set.private RecyclerView menuAsList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); menuAsList = (RecyclerView) findViewById(R.id.recyclerView_mainMenu); menuAsList.setLayoutManager(new LinearLayoutManager(Home.this)); }
sumber
Saya mendapat masalah ini karena referensi
RecyclerView
id yang salah.untuk
sumber
Periksa dengan Anda ID tampilan pendaur ulang, menunjuk ke tampilan pendaur ulang yang sebenarnya memecahkan masalah saya
sumber
Masalah saya adalah di XML lyout saya, saya memiliki android: animateLayoutChanges disetel ke true dan saya telah memanggil notifyDataSetChanged () pada adaptor RecyclerView dalam kode Java.
Jadi, saya baru saja menghapus android: animateLayoutChanges dari layout saya dan itu memperbaiki masalah saya.
sumber
Saya mengalami masalah ini saat menggunakan perpustakaan Butterknife. Saya punya:
View rootView = inflater.inflate (R.layout.fragment_recipe_detail_view, container, false); ButterKnife.bind(rootView);
Tapi versi yang benar adalah:
View rootView = inflater.inflate (R.layout.fragment_recipe_detail_view, container, false); ButterKnife.bind(this, rootView);
sumber
Dalam Gradle, implementasikan pustaka ini:
implementation 'com.android.support:appcompat-v7:SDK_VER' implementation 'com.android.support:design:SDK_VER' implementation 'com.android.support:support-v4:SDK_VER' implementation 'com.android.support:support-v13:SDK_VER' implementation 'com.android.support:recyclerview-v7:SDK_VER'
Dalam XML sebutkan seperti ini:
<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/recyclerView"/>
Dalam Fragmen kami menggunakan
recyclerView
seperti ini:@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View rootView = inflater.inflate(R.layout.YOUR_LAYOUT_NAME, container, false); RecyclerView recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerView); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false); recyclerView.setLayoutManager(layoutManager); APICallMethod(); YOURADAPTER = new YOURADAPTER(getActivity(), YOUR_LIST); // you can use that adapter after for loop in response(APICALLMETHOD) recyclerView.setAdapter(YOURADAPTER); return rootView; }
Dalam Aktivitas kami menggunakan
RecyclerView
seperti ini:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.YOUR_LAYOUT_NAME); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false); recyclerView.setLayoutManager(layoutManager); APICallMethod(); YOURADAPTER = new YOURADAPTER(ACTIVITY_NAME.this, YOUR_LIST); // you can use that adapter after for loop in response(APICALLMETHOD) recyclerView.setAdapter(YOURADAPTER); }
jika Anda membutuhkan horizontal
RecyclerView
lakukan ini:RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false); recyclerView.setLayoutManager(layoutManager); APICallMethod(); YOURADAPTER = new YOURADAPTER(ACTIVITY_NAME.this, YOUR_LIST); // you can use that adapter after for loop in response(APICALLMETHOD) recyclerView.setAdapter(YOURADAPTER);
jika Anda ingin menggunakan GridLayoutManager menggunakan
RecyclerView
penggunaan seperti ini:RecyclerView recyclerView = findViewById(R.id.rvNumbers); recyclerView.setLayoutManager(new GridLayoutManager(this, 3)); // 3 is number of columns. adapter = new MyRecyclerViewAdapter(this, data); recyclerView.setAdapter(adapter);
sumber
Saya menggunakan Injeksi Ketergantungan - ButterKnife dan masalah ini muncul karena saya tidak mengikat tampilan.
Jadi di dalam onCreate () saya baru saja memasukkan baris ini:
ButterKnife.bind(this);
Deklarasi RecyclerView saya dengan Dependency Injection:
@BindView(R.id.recyclerview) RecyclerView recyclerView;
sumber
Bagi mereka yang menggunakan: implementasi 'androidx.recyclerview: recyclerview: 1.1.0-beta05'
pastikan Anda menggunakan ini dalam tata letak xml Anda
Saya juga mengalami crash saat menjalankan aplikasi saya di bawah API 27. Berikut link ke pesan tersebut
Awalnya, saya telah membuat gaya untuk mengubah ukuran font textview saya di dalam recyclerview, itulah mengapa saya membuat kode ini di bawah ini: (Saya bisa saja memanggil @dimen saat mengubah ukuran font berdasarkan ukuran layar)
Di dalam style.xml
dan menambahkan ini di tema saya
themes.xml
Setelah menyelidiki, saya menemukan bahwa inilah yang menyebabkan kesalahan dan setelah menghapus gaya, saya tidak lagi mengalami crash.
Saya mencoba semua solusi yang mungkin saya temukan di sini di stack overflow dan hampir menyerah dalam hal ini, untungnya dalam keingintahuan saya, saya berpikir mengapa tidak menghapus gaya mungkin ini menyebabkan crash dan kemudian boom crash hilang.
sumber
Karena LinearLayoutManager vertikal secara default, cara yang lebih mudah untuk melakukannya adalah:
recyclerView.setLayoutManager(new LinearLayoutManager(context));
Jika Anda ingin mengubah orientasi, Anda dapat menggunakan konstruktor ini:
public LinearLayoutManager(Context context, int orientation, boolean reverseLayout);
sumber
Saya pikir masalah di
Adapter
. Pastikan Anda telah kembaliViewHolder
dionCreateViewHolder()
. Seperti dibawah ini:@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v; v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_leaderboard, parent, false); ViewHolder view_holder = new ViewHolder(v); return view_holder; }
sumber
Bagi saya masalahnya ada pada activity_main.xml (21) saya di mana recycleView tidak memiliki id.
activity_main.xml (21)
<android.support.v7.widget.RecyclerView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginLeft="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/button3" tools:listitem="@layout/transaction_list_row" />
activity_main.xml
<android.support.v7.widget.RecyclerView android:id="@+id/transac_recycler_view" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginLeft="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/button3" />
Ini berfungsi ketika saya menambahkan android: id = "@ + id / transac_recycler_view" ke activity_main.xml (21) recycleView
sumber
Dalam kasus saya, saya hanya menambahkan perpustakaan butterknife dan lupa menambahkan annotationProcessor. Dengan menambahkan baris di bawah ini ke build.gradle (modul App), memecahkan masalah saya.
annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
sumber
Recyclerview recylerview = findbyid (R.id.recyclerview) Mungkin Anda melewatkannya
sumber
Saya mengalami masalah yang sama saat menguji aplikasi saya di GenyMotion. Setelah restart perangkat di GenyMotion masalah terpecahkan
sumber
Saya menghadapi masalah yang sama karena saya memiliki RecyclerView di layout lain dan bukan di activity_main.xml.
Dengan mencari di beberapa situs, saya mendapatkan sesuatu dan ingin berbagi di sini
Tambahkan Id untuk Menyertakan tag di Activity_main.xml
<include id="includedRecyclerLayout" .... </include>
panggil layout ini sebelum Mencari tampilan berdasarkan ID di MainActivity.java
`ConstraintLayout IncludedLayout = findViewById (R.id.inckudedRecyclerLayout);
RecyclerViewrecyclerview = termasukLayout.findViewById (R.id.RECYCLER_VIEW_ID) `;
sumber
Saya mengalami masalah ini saat menggunakan Butterknife, saya menggunakan fragmen
Untuk Fragmen, seharusnya begitu
ButterKnife.bind(this,view);
Untuk Aktivitas
ButterKnife.bind(this);
sumber
Jika saya di mana Anda saya akan melakukan ini. onView (withId (android.R.id.list)). perform (RecyclerViewActions.scrollToPosition (3)); android.R.id.list ubah ke id daftar Anda dan posisi akan menjadi posisi Anda di dalam array Anda.
sumber
menulis kode di onCreateView ()
RecyclerView recyVideo = view.findViewById (R.id.recyVideoFag);
menulis kode di onCreate () RecyclerView recyVideo = findViewById (R.id.recyVideoFag);
sumber