В моем приложении я в основном пытаюсь разбить на палитры мое представление переработчика, где сначала в мое представление переработчика загружается 50 элементов, а затем после добавления еще 50 элементов в представление переработчика.При смене страницы все работает нормально, однако важная часть заключается в том, что при изменении страницы мое приложение переходит в состояние ANR.Чтобы исправить это, я также попытался поместить свой код в класс AsyncTask, но, похоже, ничего не помогло.Пожалуйста, посмотрите на мой код и помогите мне решить проблему.Любая помощь будет оценена.!
Это код моего класса активности:
Вот код onScrollListener
, зарегистрированный в деятельности;
GridLayoutManager manager = new GridLayoutManager(mActivity, 3, LinearLayoutManager.VERTICAL, false);
rcv_images.addItemDecoration(new GridSpacingItemDecoration(3, 4, true));
rcv_images.setLayoutManager(manager);
mMainFolderImagesAdapter = new MainFolderImagesAdapter(mAlbumName, mDatabaseHelper, mActivity, bean);
mMainFolderImagesAdapter.setItemClickListener(MainFolderImagesActivity.this);
rcv_images.setItemAnimator(new DefaultItemAnimator());
nestedScrollView.setOnScrollChangeListener(new PaginationScrollListener(manager) {
@Override
protected void loadMoreItems() {
isLoading = true;
currentPage += 1;
loadNextPage();
}
@Override
public int getTotalPageCount() {
return totalpage;
}
@Override
public boolean isLastPage() {
return isLastPage;
}
@Override
public boolean isLoading() {
return isLoading;
}
});
rcv_images.setAdapter(mMainFolderImagesAdapter);
Этометод загрузки следующей страницы, который загружает следующие элементы в представление переработчика:
private void loadNextPage() {
boolean islast1 = false;
mMainFolderImagesAdapter.removeLoadingFooter();
ArrayList<String> tempImages = new ArrayList<>();
if (mMainFolderImagesAdapter.getItemCount() + 50 <= mImageItems.size()) {
for (int i = mMainFolderImagesAdapter.getItemCount(); i < mMainFolderImagesAdapter.getItemCount() + 50; i++) {
tempImages.add(mImageItems.get(i));
}
mMainFolderImagesAdapter.updateResult1(tempImages);
changeCount(mImageItems.size());
isLoading = false;
} else {
for (int i = mMainFolderImagesAdapter.getItemCount(); i < mImageItems.size(); i++) {
tempImages.add(mImageItems.get(i));
}
mMainFolderImagesAdapter.updateResult1(tempImages);
changeCount(mImageItems.size());
isLoading = false;
islast1 = true;
}
if (currentPage != totalpage) {
mMainFolderImagesAdapter.addLoadingFooter();
} else isLastPage = true;
if (islast1) {
mMainFolderImagesAdapter.setlast();
}
}
This is the method which i'm using in adapter to update my items:
public void updateResult1(ArrayList<String> imageItems) {
thumbPaths.addAll(imageItems);
notifyItemRangeInserted(getItemCount(), thumbPaths.size());
}
Это мой код XML в формате переработчика:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cl_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.core.widget.NestedScrollView
android:id="@+id/nestedScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rcv_images"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:scrollbars="vertical"
/>
</androidx.core.widget.NestedScrollView>
<TextView
android:id="@+id/tv_no_images"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_32sdp"
android:gravity="center"
android:text="No Images"
android:textColor="@color/black"
android:textSize="@dimen/_18ssp"
android:textStyle="bold"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>