diff --git a/app/src/main/java/com/gh/gamecenter/amway/AmwayFragment.kt b/app/src/main/java/com/gh/gamecenter/amway/AmwayFragment.kt index 0f4cace91a..4f9597e459 100644 --- a/app/src/main/java/com/gh/gamecenter/amway/AmwayFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/amway/AmwayFragment.kt @@ -105,7 +105,7 @@ class AmwayFragment : LazyListFragment() { super.initRealView() mExposureListener = ExposureListener(this, mAdapter!!) - mListRv.addOnScrollListener(mExposureListener) + mListRv?.addOnScrollListener(mExposureListener) if (!mUseAlternativeLayout) { initDefaultLayout() @@ -282,9 +282,9 @@ class AmwayFragment : LazyListFragment() { 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) } diff --git a/app/src/main/java/com/gh/gamecenter/category/CategoryDirectoryFragment.kt b/app/src/main/java/com/gh/gamecenter/category/CategoryDirectoryFragment.kt index cecc829693..b865ff90ad 100644 --- a/app/src/main/java/com/gh/gamecenter/category/CategoryDirectoryFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/category/CategoryDirectoryFragment.kt @@ -51,16 +51,16 @@ class CategoryDirectoryFragment : LazyListFragment= 10) { - mListRv.scrollToPosition(6) + mListRv?.scrollToPosition(6) } - mListRv.smoothScrollToPosition(0) + mListRv?.smoothScrollToPosition(0) mDefaultBinding.appbar.setExpanded(true) } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/kaifu/ServersCalendarListFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/kaifu/ServersCalendarListFragment.kt index c25064135f..3fdf47a97e 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/kaifu/ServersCalendarListFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/kaifu/ServersCalendarListFragment.kt @@ -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 diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingFragment.kt index 67a705b3d3..722ee3d17b 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingFragment.kt @@ -129,7 +129,7 @@ class RatingFragment : LazyListFragment(), 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(), 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(), IScro val bar = view.findViewById(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(), 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) } diff --git a/app/src/main/java/com/gh/gamecenter/qa/video/detail/comment/VideoCommentFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/video/detail/comment/VideoCommentFragment.kt index 189ec97312..bd9c60bb37 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/video/detail/comment/VideoCommentFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/video/detail/comment/VideoCommentFragment.kt @@ -190,7 +190,7 @@ class VideoCommentFragment : LazyListFragment>, SwipeRefreshLayout.OnRefreshListener, OnDataObservable { - + @Nullable protected RecyclerView mListRv; @Nullable protected SwipeRefreshLayout mListRefresh; @@ -136,7 +136,7 @@ public abstract class LazyListFragment 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 { - 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