私は他の回答を見ようとしましたが、私のケースに対処していません。私は無限のスクロールでrecyviewにアイテムをロードするたびに、私のrecyclerviewでエラーが発生します。時々、それは、リサイクルビューにアイテムをロードし、他の時には、以下のように、logcatにメッセージを与えられたリサイクルビューをブランクのままにします。アプリケーションのRecycleview notifyDataSetChanged()erro
IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling
私のクラスは私のアダプタが
Schoolarship_Adapter(Context cont, List<Schoolarship> items, @NonNull RecyclerView rv){
context = cont;
listItems = items;
if((rv.getLayoutManager() instanceof LinearLayoutManager)) {
final LinearLayoutManager gm = (LinearLayoutManager) rv.getLayoutManager();
rv.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy){
super.onScrolled(recyclerView, dx, dy);
totalItemCount = gm.getItemCount();
lastVisibleItem = gm.findLastVisibleItemPosition();
if(!loading &&totalItemCount <= (lastVisibleItem + visibleThreshold)){
if(onLoadMoreListener!=null){
onLoadMoreListener.onLoadMore();
}
loading = true;
}
}
});
}
}
Plsのように見えている
itemAdapter.setOnLoadMoreListener(new Schoolarship_Adapter.OnLoadMoreListener() {
@Override
public void onLoadMore() {
listItem.add(null);
itemAdapter.notifyItemInserted(listItem.size() - 1);
final Handler handler = new Handler();
final Runnable r = new Runnable() {
@Override
public void run() {
listItem.remove(listItem.size() - 1);
itemAdapter.notifyItemRemoved(listItem.size());
++pagenumber;
new RetrieveItems().execute();
System.out.println("working now i guess");
itemAdapter.notifyDataSetChanged();
itemAdapter.setLoaded();
}
};
handler.post(r);
}
});
として、なぜ私はまだそのエラー私はこのアプリを実行するたびに得るのですか?
'new RetrieveItems()。execute()'はデータを読み込みますか? –
はいそれは私のデータをロードします –
なぜその文の後に 'notifyDataSetChanged'がありますか? **データが完全にロードされた後、**のアイデアがアダプタに通知されます。通知するときは、データが完全に読み込まれません。 'AsyncTask'' RetrieveItems'の' onPostExecute'メソッドの中に 'notifyDataSetChanged'を書くべきです。 –