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

@ -105,7 +105,7 @@ class AmwayFragment : LazyListFragment<AmwayListItemData, AmwayViewModel>() {
super.initRealView()
mExposureListener = ExposureListener(this, mAdapter!!)
mListRv.addOnScrollListener(mExposureListener)
mListRv?.addOnScrollListener(mExposureListener)
if (!mUseAlternativeLayout) {
initDefaultLayout()
@ -282,9 +282,9 @@ class AmwayFragment : LazyListFragment<AmwayListItemData, AmwayViewModel>() {
private fun scrollToTop() {
val firstItemPosition = mLayoutManager.findFirstVisibleItemPosition()
if (firstItemPosition >= 10) {
mListRv.scrollToPosition(6)
mListRv?.scrollToPosition(6)
}
mListRv.smoothScrollToPosition(0)
mListRv?.smoothScrollToPosition(0)
mDefaultBinding?.appbar?.setExpanded(true)
}

View File

@ -51,16 +51,16 @@ class CategoryDirectoryFragment : LazyListFragment<CategoryEntity, CategoryDirec
onLoadRefresh()
if (arguments?.getBoolean(EntranceConsts.KEY_IS_HOME) == true) {
mListRv.setPadding(
mListRv?.setPadding(
0,
context?.resources?.getDimension(R.dimen.home_recyclerview_padding_top)?.toInt() ?: 0,
0,
0
)
mListRv.clipToPadding = false
mListRv?.clipToPadding = false
}
mListRv.setBackgroundColor(R.color.background_white.toColor(requireContext()))
mListRv?.setBackgroundColor(R.color.background_white.toColor(requireContext()))
mAdapter.recyclerView = mListRv
mListRefresh?.isEnabled = false
}
@ -95,9 +95,9 @@ class CategoryDirectoryFragment : LazyListFragment<CategoryEntity, CategoryDirec
override fun onDarkModeChanged() {
super.onDarkModeChanged()
mListRv.setBackgroundColor(R.color.background_white.toColor(requireContext()))
mListRv.adapter?.run {
mListRv.recycledViewPool.clear()
mListRv?.setBackgroundColor(R.color.background_white.toColor(requireContext()))
mListRv?.adapter?.run {
mListRv?.recycledViewPool?.clear()
notifyItemRangeChanged(0, itemCount)
}
}

View File

@ -78,9 +78,9 @@ class ForumArticleAskListFragment : LazyListFragment<AnswerEntity, ForumArticleA
override fun onFragmentFirstVisible() {
super.onFragmentFirstVisible()
mListRv.overScrollMode = View.OVER_SCROLL_NEVER
mListRv?.overScrollMode = View.OVER_SCROLL_NEVER
mListRefresh?.isEnabled = false
mListRv.setBackgroundColor(R.color.background_white.toColor(requireContext()))
mListRv?.setBackgroundColor(R.color.background_white.toColor(requireContext()))
mScrollCalculatorHelper = ForumScrollCalculatorHelper(R.id.horizontalVideoView, R.id.verticalVideoView, 0)
view?.setBackgroundColor(R.color.background_white.toColor(requireContext()))
@ -97,7 +97,7 @@ class ForumArticleAskListFragment : LazyListFragment<AnswerEntity, ForumArticleA
onLoadRefresh()
mListRv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
mListRv?.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)

View File

@ -49,7 +49,7 @@ class ForumActivityFragment : LazyListFragment<ForumActivityEntity, ForumActivit
initCategoryView(ArrayList(it))
}
mListRv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
mListRv?.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
translationY = recyclerView.computeVerticalScrollOffset()

View File

@ -84,7 +84,7 @@ class ForumArticleListFragment : LazyListFragment<ArticleEntity, ForumArticleLis
mListRefresh?.isEnabled = mRefreshEnable
})
mListRv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
mListRv?.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
mScrollCalculatorHelper?.onScrollStateChanged(mListRv, newState)
@ -218,7 +218,7 @@ class ForumArticleListFragment : LazyListFragment<ArticleEntity, ForumArticleLis
override fun scrollToTop() {
mBinding?.run {
mListRv.scrollToPosition(0)
mListRv?.scrollToPosition(0)
appbar.setExpanded(true)
}
}
@ -353,7 +353,10 @@ class ForumArticleListFragment : LazyListFragment<ArticleEntity, ForumArticleLis
override fun onDarkModeChanged() {
super.onDarkModeChanged()
if (parentFragment is CommunityHomeFragment && mListRv != null) {
(parentFragment as CommunityHomeFragment).translateTopBg(mListRv.computeVerticalScrollOffset() - 8F.dip2px())
mListRv?.let {
(parentFragment as CommunityHomeFragment).translateTopBg(it.computeVerticalScrollOffset() - 8F.dip2px())
}
}
mBinding?.run {
initSkeleton()

View File

@ -80,8 +80,8 @@ class ForumContentSearchListFragment : LazyListFragment<AnswerEntity, ForumConte
mBbsId = arguments?.getString(EntranceConsts.KEY_BBS_ID) ?: ""
mLocation = arguments?.getString(EntranceConsts.KEY_LOCATION) ?: LOCATION_COMMUNITY
super.onFragmentFirstVisible()
mListRv.overScrollMode = View.OVER_SCROLL_NEVER
mListRv.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_white))
mListRv?.overScrollMode = View.OVER_SCROLL_NEVER
mListRv?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_white))
mReuseNoData?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_white))
mBinding?.run {
fixedTopFilterView.run {
@ -120,7 +120,7 @@ class ForumContentSearchListFragment : LazyListFragment<AnswerEntity, ForumConte
override fun onDarkModeChanged() {
super.onDarkModeChanged()
mListRv.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_white))
mListRv?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_white))
mReuseNoData?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_white))
}

View File

@ -44,8 +44,8 @@ class UserSearchListFragment : LazyListFragment<FollowersOrFansEntity, UserSearc
override fun onFragmentFirstVisible() {
super.onFragmentFirstVisible()
mListRv.overScrollMode = View.OVER_SCROLL_NEVER
mListRv.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_white))
mListRv?.overScrollMode = View.OVER_SCROLL_NEVER
mListRv?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_white))
mReuseNoData?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_white))
}
@ -65,7 +65,7 @@ class UserSearchListFragment : LazyListFragment<FollowersOrFansEntity, UserSearc
override fun onDarkModeChanged() {
super.onDarkModeChanged()
mListRv.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_white))
mListRv?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_white))
mReuseNoData?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_white))
}
}

View File

@ -82,15 +82,15 @@ class ColumnCollectionDetailFragment : LazyListFragment<LinkEntity, ColumnCollec
mExposureListener = ExposureListener(this, provideListAdapter())
mListRv.clipToPadding = false
mListRv.layoutManager = gridLayoutManager
mListRv.addOnScrollListener(mExposureListener!!)
mListRv?.clipToPadding = false
mListRv?.layoutManager = gridLayoutManager
mListRv?.addOnScrollListener(mExposureListener!!)
if (mListViewModel.rowCount() == 1) {
mListRv.setPadding(16F.dip2px(), 0, 16F.dip2px(), 0)
mListRv.addItemDecoration(GridSpacingItemDecoration(mListViewModel.rowCount(), 16F.dip2px(), false))
mListRv?.setPadding(16F.dip2px(), 0, 16F.dip2px(), 0)
mListRv?.addItemDecoration(GridSpacingItemDecoration(mListViewModel.rowCount(), 16F.dip2px(), false))
} else {
mListRv.setPadding(16F.dip2px(), 8F.dip2px(), 16F.dip2px(), 0)
mListRv.addItemDecoration(GridSpacingItemDecoration(mListViewModel.rowCount(), 12F.dip2px(), false))
mListRv?.setPadding(16F.dip2px(), 8F.dip2px(), 16F.dip2px(), 0)
mListRv?.addItemDecoration(GridSpacingItemDecoration(mListViewModel.rowCount(), 12F.dip2px(), false))
}
}
}

View File

@ -102,18 +102,18 @@ class CommonCollectionDetailFragment : LazyListFragment<LinkEntity, CommonCollec
mAdapter?.collectionStyle = mCollectionStyle
if (mCollectionStyle == "1-2") {
mLayoutManager = FixGridLayoutManager(requireContext(), 2)
mListRv.layoutManager = mLayoutManager
mListRv?.layoutManager = mLayoutManager
}
mListRv.removeItemDecorationAt(0)
mListRv.addItemDecoration(itemDecoration)
mListRv?.removeItemDecorationAt(0)
mListRv?.addItemDecoration(itemDecoration)
}
mListViewModel.loadExceptionLiveData.observe(viewLifecycleOwner) {
if (it != null && it.code() == 404) {
toast("内容可能已被删除")
}
}
mListRv.addOnScrollListener(mExposureListener!!)
mListRv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
mListRv?.addOnScrollListener(mExposureListener!!)
mListRv?.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
if (newState == RecyclerView.SCROLL_STATE_IDLE) {

View File

@ -191,7 +191,7 @@ class GameCollectionSquareFragment : LazyListFragment<GamesCollectionEntity, Gam
super.initRealView()
mExposureListener = ExposureListener(this, mAdapter!!)
mListRv.addOnScrollListener(mExposureListener)
mListRv?.addOnScrollListener(mExposureListener)
initSkeleton()
if (!mUseAlternativeLayout) {
initDefaultLayout()
@ -652,7 +652,7 @@ class GameCollectionSquareFragment : LazyListFragment<GamesCollectionEntity, Gam
if (mReuseNoData != null) mReuseNoData!!.visibility = View.VISIBLE
if (mListLoading != null) mListLoading!!.visibility = View.GONE
if (mDataExceptionView != null) mDataExceptionView!!.visibility = View.GONE
mListRv.isVisible = mUseAlternativeLayout
mListRv?.isVisible = mUseAlternativeLayout
hideRefreshingLayout()
if (!mUseAlternativeLayout) mDefaultBinding.tagFilterContainer.root.visibility = View.VISIBLE
}
@ -713,7 +713,7 @@ class GameCollectionSquareFragment : LazyListFragment<GamesCollectionEntity, Gam
if (mListLoading != null) mListLoading!!.visibility =
if (mListRefresh == null || !mListRefresh!!.isRefreshing) View.VISIBLE else View.GONE
if (mReuseNoData != null) mReuseNoData!!.visibility = View.GONE
if (mListRv != null && (!mUseAlternativeLayout || showSkeleton)) mListRv.visibility = View.GONE
if (mListRv != null && (!mUseAlternativeLayout || showSkeleton)) mListRv?.visibility = View.GONE
if (!mUseAlternativeLayout) mDefaultBinding.tagFilterContainer.root.visibility = View.VISIBLE
if (mUseAlternativeLayout) {
mAdapter?.run {
@ -727,9 +727,9 @@ class GameCollectionSquareFragment : LazyListFragment<GamesCollectionEntity, Gam
private fun scrollToTop() {
val firstItemPosition = mLayoutManager.findFirstVisibleItemPosition()
if (firstItemPosition >= 10) {
mListRv.scrollToPosition(6)
mListRv?.scrollToPosition(6)
}
mListRv.smoothScrollToPosition(0)
mListRv?.smoothScrollToPosition(0)
mDefaultBinding.appbar.setExpanded(true)
}

View File

@ -70,7 +70,7 @@ class ServersCalendarListFragment :
DirectUtils.directToServersSubscribedGameList(it.context)
}
mListRv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
mListRv?.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
val layoutManager = recyclerView.layoutManager

View File

@ -129,7 +129,7 @@ class RatingFragment : LazyListFragment<RatingComment, RatingViewModel>(), IScro
val horizontalPadding = R.dimen.game_detail_item_horizontal_padding.toPx()
mSkipGameComment = arguments?.getBoolean(EntranceConsts.KEY_SKIP_GAME_COMMENT)
mListRv.setPadding(horizontalPadding, 0, horizontalPadding, 0)
mListRv?.setPadding(horizontalPadding, 0, horizontalPadding, 0)
mListRefresh?.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.transparent))
mListRefresh?.isEnabled = mRatingType != RatingViewModel.RatingType.RATING
mListViewModel.ratingLiveData.observe(this, Observer {
@ -157,7 +157,7 @@ class RatingFragment : LazyListFragment<RatingComment, RatingViewModel>(), IScro
}.build()
foldRatingReasonTv.movementMethod = LinkMovementMethod()
}
mListRv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
mListRv?.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
@ -180,7 +180,7 @@ class RatingFragment : LazyListFragment<RatingComment, RatingViewModel>(), IScro
val bar = view.findViewById<View>(R.id.all_comment_bar)
if (bar != null) {
mBaseHandler.postDelayed({
mListRv.smoothScrollBy(0, bar.top)
mListRv?.smoothScrollBy(0, bar.top)
}, 500)
}
mSkipGameComment = false
@ -192,7 +192,7 @@ class RatingFragment : LazyListFragment<RatingComment, RatingViewModel>(), IScro
mReuseNoConn?.visibility = View.GONE
mReuseNoData?.visibility = View.GONE
mListLoading?.visibility = View.VISIBLE
mListRv.visibility = View.GONE
mListRv?.visibility = View.GONE
mBaseHandler.postDelayed({ mListViewModel.initData() }, 500)
}

View File

@ -190,7 +190,7 @@ class VideoCommentFragment : LazyListFragment<CommentItemData, VideoCommentViewM
if (mReuseNoData != null) mReuseNoData!!.visibility = View.GONE
if (mListLoading != null) mListLoading!!.visibility = View.GONE
mListRv.visibility = View.VISIBLE
mListRv?.visibility = View.VISIBLE
hideRefreshingLayout()
}
@ -199,13 +199,13 @@ class VideoCommentFragment : LazyListFragment<CommentItemData, VideoCommentViewM
mReuseNoData?.visibility = View.GONE
mListLoading?.visibility = View.GONE
mListRv.visibility = View.VISIBLE
mListRv?.visibility = View.VISIBLE
hideRefreshingLayout()
mListRv.postDelayed({
mListRv.scrollToPosition(0)
mListRv?.postDelayed({
mListRv?.scrollToPosition(0)
}, 50)
mListRv.postDelayed({
mListRv?.postDelayed({
if (provideListAdapter().itemCount < theNumberNeededToFillAScreen()) {
autoLoadMore()
}

View File

@ -36,7 +36,7 @@ class VideoDescFragment : LazyListFragment<VideoDescItemEntity, VideoDescViewMod
mVideoDetailViewModel = viewModelProviderFromParent()
super.onFragmentFirstVisible()
mListRefresh?.isEnabled = false
mListRv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
mListRv?.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
if (newState == RecyclerView.SCROLL_STATE_IDLE) {

View File

@ -56,7 +56,7 @@ class GameServerTestV2ListFragment :
}
if (XapkUnzipStatus.FAILURE.name == downloadEntity.meta[XapkInstaller.XAPK_UNZIP_STATUS]) {
for (position in locationList) {
val targetView = mListRv.layoutManager?.findViewByPosition(position)
val targetView = mListRv?.layoutManager?.findViewByPosition(position)
if (targetView != null) {
DialogUtils.showUnzipFailureDialog(requireContext(), downloadEntity)
break
@ -98,7 +98,9 @@ class GameServerTestV2ListFragment :
override fun initRealView() {
super.initRealView()
mListRefresh?.isEnabled = false
mScrollCalculatorHelper = ScrollCalculatorHelper(mListRv, R.id.autoVideoView, 0)
mListRv?.let {
mScrollCalculatorHelper = ScrollCalculatorHelper(it, R.id.autoVideoView, 0)
}
}
override fun initSkeletonScreen() {
@ -116,10 +118,10 @@ class GameServerTestV2ListFragment :
override fun onFragmentFirstVisible() {
super.onFragmentFirstVisible()
mListRv.clearOnScrollListeners()
mListRv?.clearOnScrollListeners()
mExposureListener = ExposureListener(this, mAdapter!!)
mListRv.addOnScrollListener(mExposureListener)
mListRv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
mListRv?.addOnScrollListener(mExposureListener)
mListRv?.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
val layoutManager = recyclerView.layoutManager
@ -179,8 +181,8 @@ class GameServerTestV2ListFragment :
}
private fun scroll() {
val firstVisibleItem = (mListRv.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition()
val lastVisibleItem = (mListRv.layoutManager as LinearLayoutManager).findLastVisibleItemPosition()
val firstVisibleItem = (mListRv?.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition()
val lastVisibleItem = (mListRv?.layoutManager as LinearLayoutManager).findLastVisibleItemPosition()
mScrollCalculatorHelper.onScroll(firstVisibleItem, lastVisibleItem)
}
@ -322,7 +324,7 @@ class GameServerTestV2ListFragment :
super.onChanged(ts)
if (!ts.isNullOrEmpty() && mListViewModel.isLoadFirstPage) {
scrollToTime(GameServerTestV2ViewModel.TimeFilter.TODAY.value)
mListRv.postDelayed({
mListRv?.postDelayed({
scroll()
mScrollCalculatorHelper.onScrollStateChanged(RecyclerView.SCROLL_STATE_IDLE)
}, 200)
@ -333,10 +335,10 @@ class GameServerTestV2ListFragment :
val positionToScroll = mListViewModel!!.getPositionByTimeFilter(timeFilter)
if (positionToScroll < 0) return
mLayoutManager.scrollToPositionWithOffset(positionToScroll, 0)
mListRv.post {
mListRv?.post {
mLayoutManager.scrollToPositionWithOffset(positionToScroll, 0)
if (mListViewModel.isLoadFirstPage) {
mListRv.post {
mListRv?.post {
val firstVisibleItemPosition = mLayoutManager.findFirstVisibleItemPosition()
mBinding?.pullDownTipIv?.goneIf(firstVisibleItemPosition <= 0)
mListViewModel.isLoadFirstPage = false

View File

@ -124,7 +124,7 @@ open class SubjectListFragment : LazyListFragment<GameEntity, SubjectListViewMod
super.initRealView()
// 与外部Appbar交互
mListRv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
mListRv?.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
val position = mLayoutManager.findFirstCompletelyVisibleItemPosition()
@ -135,7 +135,7 @@ open class SubjectListFragment : LazyListFragment<GameEntity, SubjectListViewMod
})
mExposureListener = ExposureListener(this, mAdapter!!)
mListRv.addOnScrollListener(mExposureListener)
mListRv?.addOnScrollListener(mExposureListener)
}
fun refreshPage(filter: String, sort: String, size: SubjectSettingEntity.Size) {

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();
}