fix:社区搜索改为懒加载后,切换浅色模式crash

This commit is contained in:
张晨
2023-11-06 10:13:37 +08:00
parent 2bba43cf26
commit 9ede98deea
17 changed files with 115 additions and 103 deletions

View File

@ -35,7 +35,7 @@ public abstract class LazyListFragment<T, VM extends BaseListViewModel /* 该泛
Observer<List<T>>,
SwipeRefreshLayout.OnRefreshListener,
OnDataObservable<T> {
@Nullable
protected RecyclerView mListRv;
@Nullable
protected SwipeRefreshLayout mListRefresh;
@ -136,7 +136,7 @@ public abstract class LazyListFragment<T, VM extends BaseListViewModel /* 该泛
if (isAutomaticLoad()) mListViewModel.load(LoadType.NORMAL);
RecyclerView.ItemDecoration itemDecoration = getItemDecoration();
if (itemDecoration != null) mListRv.addItemDecoration(itemDecoration);
if (itemDecoration != null && mListRv != null) mListRv.addItemDecoration(itemDecoration);
}
/**
@ -158,40 +158,42 @@ public abstract class LazyListFragment<T, VM extends BaseListViewModel /* 该泛
}
mLayoutManager = new FixLinearLayoutManager(getContext());
((DefaultItemAnimator) mListRv.getItemAnimator()).setSupportsChangeAnimations(false);
mListRv.setLayoutManager(mLayoutManager);
mListRv.setAdapter(provideListAdapter());
mListRv.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
RecyclerView.LayoutManager layoutManager = mListRv.getLayoutManager();
if (layoutManager instanceof LinearLayoutManager) {
if (((LinearLayoutManager) layoutManager).findLastVisibleItemPosition() == provideListAdapter().getItemCount() - 1
&& RecyclerView.SCROLL_STATE_IDLE == newState) {
mListViewModel.load(LoadType.NORMAL);
}
} else if (layoutManager instanceof StaggeredGridLayoutManager) {
int visibleItemCount = layoutManager.getChildCount();
int totalItemCount = layoutManager.getItemCount();
if ((visibleItemCount > 0 && newState == RecyclerView.SCROLL_STATE_IDLE && (lastVisibleItemPosition) >= totalItemCount - 1)) {
mListViewModel.load(LoadType.NORMAL);
if (mListRv != null) {
mListRv.setLayoutManager(mLayoutManager);
mListRv.setAdapter(provideListAdapter());
mListRv.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
RecyclerView.LayoutManager layoutManager = mListRv.getLayoutManager();
if (layoutManager instanceof LinearLayoutManager) {
if (((LinearLayoutManager) layoutManager).findLastVisibleItemPosition() == provideListAdapter().getItemCount() - 1
&& RecyclerView.SCROLL_STATE_IDLE == newState) {
mListViewModel.load(LoadType.NORMAL);
}
} else if (layoutManager instanceof StaggeredGridLayoutManager) {
int visibleItemCount = layoutManager.getChildCount();
int totalItemCount = layoutManager.getItemCount();
if ((visibleItemCount > 0 && newState == RecyclerView.SCROLL_STATE_IDLE && (lastVisibleItemPosition) >= totalItemCount - 1)) {
mListViewModel.load(LoadType.NORMAL);
}
}
}
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
RecyclerView.LayoutManager layoutManager = mListRv.getLayoutManager();
if (layoutManager instanceof StaggeredGridLayoutManager) {
if (lastPositions == null) {
lastPositions = new int[((StaggeredGridLayoutManager) layoutManager).getSpanCount()];
RecyclerView.LayoutManager layoutManager = mListRv.getLayoutManager();
if (layoutManager instanceof StaggeredGridLayoutManager) {
if (lastPositions == null) {
lastPositions = new int[((StaggeredGridLayoutManager) layoutManager).getSpanCount()];
}
((StaggeredGridLayoutManager) layoutManager).findLastVisibleItemPositions(lastPositions);
lastVisibleItemPosition = NumberUtils.findMax(lastPositions);
}
((StaggeredGridLayoutManager) layoutManager).findLastVisibleItemPositions(lastPositions);
lastVisibleItemPosition = NumberUtils.findMax(lastPositions);
}
}
});
});
}
if (mReuseNoConn != null) mReuseNoConn.setOnClickListener(view1 -> onLoadRefresh());
}
@ -254,14 +256,16 @@ public abstract class LazyListFragment<T, VM extends BaseListViewModel /* 该泛
if (mReuseNoData != null) mReuseNoData.setVisibility(View.GONE);
if (mListLoading != null) mListLoading.setVisibility(View.GONE);
if (mDataExceptionView != null) mDataExceptionView.setVisibility(View.GONE);
mListRv.setVisibility(View.VISIBLE);
hideRefreshingLayout();
mListRv.postDelayed(() -> {
if (provideListAdapter().mEntityList.size() < theNumberNeededToFillAScreen()) {
autoLoadMore();
}
}, getAutoLoadMoreDelay());
hideRefreshingLayout();
if (mListRv != null) {
mListRv.setVisibility(View.VISIBLE);
mListRv.postDelayed(() -> {
if (provideListAdapter().mEntityList.size() < theNumberNeededToFillAScreen()) {
autoLoadMore();
}
}, getAutoLoadMoreDelay());
}
}
public void onLoadError() {
@ -270,7 +274,9 @@ public abstract class LazyListFragment<T, VM extends BaseListViewModel /* 该泛
if (mReuseNoData != null) mReuseNoData.setVisibility(View.GONE);
if (mListLoading != null) mListLoading.setVisibility(View.GONE);
if (mDataExceptionView != null) mDataExceptionView.setVisibility(View.GONE);
mListRv.setVisibility(View.GONE);
if (mListRv != null) {
mListRv.setVisibility(View.GONE);
}
hideRefreshingLayout();
}
@ -280,7 +286,9 @@ public abstract class LazyListFragment<T, VM extends BaseListViewModel /* 该泛
if (mReuseNoData != null) mReuseNoData.setVisibility(View.VISIBLE);
if (mListLoading != null) mListLoading.setVisibility(View.GONE);
if (mDataExceptionView != null) mDataExceptionView.setVisibility(View.GONE);
mListRv.setVisibility(View.GONE);
if (mListRv != null) {
mListRv.setVisibility(View.GONE);
}
hideRefreshingLayout();
}
@ -291,8 +299,7 @@ public abstract class LazyListFragment<T, VM extends BaseListViewModel /* 该泛
if (mReuseNoConn != null) mReuseNoConn.setVisibility(View.GONE);
if (mReuseNoData != null) mReuseNoData.setVisibility(View.GONE);
if (mListLoading != null) mListLoading.setVisibility(View.GONE);
mListRv.setVisibility(View.GONE);
if (mListRv != null) mListRv.setVisibility(View.GONE);
hideRefreshingLayout();
}