From 9ede98deead0f46fedae8dfd42cbfea2add775dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=99=A8?= Date: Mon, 6 Nov 2023 10:13:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E7=A4=BE=E5=8C=BA=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=87=92=E5=8A=A0=E8=BD=BD=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E6=B5=85=E8=89=B2=E6=A8=A1=E5=BC=8Fcrash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gh/gamecenter/amway/AmwayFragment.kt | 6 +- .../category/CategoryDirectoryFragment.kt | 12 +-- .../detail/ForumArticleAskListFragment.kt | 6 +- .../forum/home/ForumActivityFragment.kt | 2 +- .../forum/home/ForumArticleListFragment.kt | 9 +- .../search/ForumContentSearchListFragment.kt | 6 +- .../forum/search/UserSearchListFragment.kt | 6 +- .../detail/ColumnCollectionDetailFragment.kt | 14 +-- .../detail/CommonCollectionDetailFragment.kt | 10 +-- .../square/GameCollectionSquareFragment.kt | 10 +-- .../fuli/kaifu/ServersCalendarListFragment.kt | 2 +- .../gamedetail/rating/RatingFragment.kt | 8 +- .../detail/comment/VideoCommentFragment.kt | 10 +-- .../qa/video/detail/desc/VideoDescFragment.kt | 2 +- .../gametest2/GameServerTestV2ListFragment.kt | 22 ++--- .../gamecenter/subject/SubjectListFragment.kt | 4 +- .../common/baselist/LazyListFragment.java | 89 ++++++++++--------- 17 files changed, 115 insertions(+), 103 deletions(-) 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