diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescFragment.kt index 8b35bf3a51..ba03adc5e6 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescFragment.kt @@ -42,9 +42,10 @@ import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode +// TODO 处理页面重建时会生成额外 Fragment 的问题 class DescFragment: LazyFragment(), IScrollable { - private lateinit var mAdapter: DescAdapter + private var mAdapter: DescAdapter ? = null private var mLayoutManager: LinearLayoutManager? = null private var mGameEntity: GameEntity? = null @@ -64,12 +65,15 @@ class DescFragment: LazyFragment(), IScrollable { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) + + val adapter = mAdapter ?: return + if (resultCode == Activity.RESULT_OK) { if (DescCommentsAdapter.RATING_REPLY_REQUEST == requestCode || DescCommentsAdapter.RATING_PATCH_REQUEST == requestCode) { var commentPosition = 0 SyncDataBetweenPageHelper.resultHandle(data, object : OnSyncCallBack { override fun onData(dataPosition: Int): RatingComment? { - val descItemList = mAdapter.descItemList + val descItemList = adapter.descItemList for (i in 0 until descItemList.size) { val comments = descItemList[i].comment if (comments != null) { @@ -85,16 +89,16 @@ class DescFragment: LazyFragment(), IScrollable { } override fun onNotify(dataPosition: Int) { - mAdapter.notifyItemChanged(commentPosition) + adapter.notifyItemChanged(commentPosition) } }) } else if (requestCode == 100) { - val position = mAdapter.descItemList.indexOfFirst { it.type == DetailEntity.Type.LIBAO.value } - mAdapter.notifyItemChanged(position) + val position = adapter.descItemList.indexOfFirst { it.type == DetailEntity.Type.LIBAO.value } + adapter.notifyItemChanged(position) } } else if (requestCode == DescCommentsAdapter.RATING_REPLY_REQUEST && resultCode == RatingFragment.RATING_DELETE_RESULT) { data?.getParcelableExtra(RatingComment::class.java.simpleName)?.run { - val descItemList = mAdapter.descItemList + val descItemList = adapter.descItemList var commentPosition = 0 for (i in 0 until descItemList.size) { val comments = descItemList[i].comment @@ -105,7 +109,7 @@ class DescFragment: LazyFragment(), IScrollable { break } } - mAdapter.notifyItemChanged(commentPosition) + adapter.notifyItemChanged(commentPosition) } } } @@ -129,7 +133,7 @@ class DescFragment: LazyFragment(), IScrollable { gameDetailViewModel.gameDetailLiveData.observeNonNull(this) { gameDetail -> if (gameDetail.data == null) return@observeNonNull - mAdapter.updateDescItemList(mViewModel.decorateList(gameDetail.data!!.detailEntity)) + mAdapter?.updateDescItemList(mViewModel.decorateList(gameDetail.data!!.detailEntity)) // 非镜像游戏获取大家都在玩 (数据来源看具体方法内容) 数据 if (mGameEntity?.shouldUseMirrorInfo() == false) { mViewModel.generateRecommendedGamesItem(gameDetail.data!!.detailEntity) @@ -146,10 +150,10 @@ class DescFragment: LazyFragment(), IScrollable { } } gameDetailViewModel.unifiedGameDetailWithUserRelatedInfoForChildLiveData.observeNonNull(this) { - mAdapter.updateDescItemList(mViewModel.decorateList(it.detailEntity)) + mAdapter?.updateDescItemList(mViewModel.decorateList(it.detailEntity)) } mViewModel.list.observe(this) { - mAdapter.updateDescItemList(it) + mAdapter?.updateDescItemList(it) if (mScrollToLibao && mViewModel.getLibaoIndexPosition() != -1) { mScrollToLibao = false mLayoutManager?.scrollToPositionWithOffset(mViewModel.getLibaoIndexPosition(), 0) @@ -168,7 +172,7 @@ class DescFragment: LazyFragment(), IScrollable { moreTv.isEnabled = true } if (it) { - mAdapter.notifyItemChanged(mViewModel.getColumnRecommendPosition()) + mAdapter?.notifyItemChanged(mViewModel.getColumnRecommendPosition()) } } } @@ -196,8 +200,8 @@ class DescFragment: LazyFragment(), IScrollable { for (i in firstCompletelyVisibleItemPosition..lastCompletelyVisibleItemPosition) { if (i < 0) continue - if (mAdapter.getItemViewType(i) == DescAdapter.CUSTOM_COLUMN - && mAdapter.descItemList[i].customColumn?.showExpandTagsHint == true + if (mAdapter?.getItemViewType(i) == DescAdapter.CUSTOM_COLUMN + && mAdapter!!.descItemList[i].customColumn?.showExpandTagsHint == true ) { SPUtils.setBoolean(Constants.SP_HAS_SHOWN_EXPANDED_GAME_DETAIL_TAGS_HINT, true) } @@ -255,13 +259,13 @@ class DescFragment: LazyFragment(), IScrollable { override fun onDestroy() { super.onDestroy() mCompositeDisposable.dispose() - mAdapter.stopHandlerThread() + mAdapter?.stopHandlerThread() } @Subscribe(threadMode = ThreadMode.MAIN) fun onEventMainThread(reuse: EBReuse) { if (SKIP_DESC == reuse.type) { - mAdapter.notifyDataSetChanged() + mAdapter?.notifyDataSetChanged() } } @@ -295,7 +299,7 @@ class DescFragment: LazyFragment(), IScrollable { super.onDarkModeChanged() mBinding.recyclerview.setBackgroundColor(R.color.background.toColor(requireContext())) mBinding.recyclerview.recycledViewPool.clear() - mAdapter.notifyItemRangeChanged(0, mAdapter.itemCount) + mAdapter?.let { it.notifyItemRangeChanged(0, it.itemCount) } } private fun showFloatingWindowIfNeeded() {