fix: 修复游戏详情重建时的闪退问题

This commit is contained in:
chenjuntao
2023-04-28 15:42:10 +08:00
parent 8c889001bf
commit d607c04c33

View File

@ -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<RatingComment> {
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>(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() {