fix: 修复部分闪退问题
This commit is contained in:
parent
41b658ed3d
commit
6a12257fb1
|
|
@ -57,6 +57,7 @@ import retrofit2.Call
|
|||
import retrofit2.Callback
|
||||
import retrofit2.Response
|
||||
|
||||
//TODO: 重写,去除两次加载
|
||||
@SuppressLint("NonConstantResourceId")
|
||||
class ThreadActivity : BaseActivity(), View.OnClickListener, IThreadMenuFragment.OnActionsListener {
|
||||
@BindView(R.id.toolbar)
|
||||
|
|
@ -615,7 +616,15 @@ class ThreadActivity : BaseActivity(), View.OnClickListener, IThreadMenuFragment
|
|||
|
||||
private fun updateHistory(async: Boolean = false) {
|
||||
if (dataBean != null && dataBean!!.thread != null) {
|
||||
val postListItemBean = lastVisibleItem
|
||||
val postListItemBean = try {
|
||||
lastVisibleItem
|
||||
} catch (t: Throwable) {
|
||||
try {
|
||||
firstVisibleItem
|
||||
} catch (t: Throwable) {
|
||||
null
|
||||
}
|
||||
}
|
||||
var extras = ""
|
||||
if (postListItemBean != null) {
|
||||
extras = ThreadHistoryInfoBean()
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
|
|||
lateinit var mRecyclerView: RecyclerView
|
||||
|
||||
@BindView(R.id.refresh)
|
||||
lateinit var mRefreshLayout: SmartRefreshLayout
|
||||
var mRefreshLayout: SmartRefreshLayout? = null
|
||||
|
||||
private val virtualLayoutManager: VirtualLayoutManager by lazy {
|
||||
VirtualLayoutManager(
|
||||
|
|
@ -62,13 +62,13 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
|
|||
if (preload) {
|
||||
PreLoader.listenData<ForumPageBean>(preloadId, DataHolder())
|
||||
} else if (mDataBean == null) {
|
||||
mRefreshLayout.autoRefresh()
|
||||
mRefreshLayout?.autoRefresh()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFragmentVisibleChange(isVisible: Boolean) {
|
||||
if (isVisible && mDataBean == null) {
|
||||
mRefreshLayout.autoRefresh()
|
||||
mRefreshLayout?.autoRefresh()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -147,8 +147,8 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
|
|||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
mRefreshLayout.setOnRefreshListener { refresh() }
|
||||
mRefreshLayout.setOnLoadMoreListener { loadMore() }
|
||||
mRefreshLayout?.setOnRefreshListener { refresh() }
|
||||
mRefreshLayout?.setOnLoadMoreListener { loadMore() }
|
||||
mRecyclerView.apply {
|
||||
layoutManager = virtualLayoutManager
|
||||
adapter = delegateAdapter
|
||||
|
|
@ -179,14 +179,14 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
|
|||
.forumPageAsync(forumName!!, page + 1, sortType, classifyId)
|
||||
.doIfSuccess {
|
||||
page += 1
|
||||
mRefreshLayout.finishLoadMore()
|
||||
mRefreshLayout?.finishLoadMore()
|
||||
mDataBean = it
|
||||
pageSize = it.page?.pageSize?.toInt() ?: 0
|
||||
forumAdapter.addData(it)
|
||||
mRefreshLayout.setNoMoreData(it.page?.hasMore == "0")
|
||||
mRefreshLayout?.setNoMoreData(it.page?.hasMore == "0")
|
||||
}
|
||||
.doIfFailure {
|
||||
mRefreshLayout.finishLoadMore(false)
|
||||
mRefreshLayout?.finishLoadMore(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -208,10 +208,10 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
|
|||
(attachContext as OnRefreshedListener).onFailure(errorCode, t.message)
|
||||
}
|
||||
}
|
||||
mRefreshLayout.finishRefresh(false)
|
||||
mRefreshLayout?.finishRefresh(false)
|
||||
if (errorCode == -1) {
|
||||
Util.showNetworkErrorSnackbar(mRecyclerView) {
|
||||
mRefreshLayout.autoRefresh()
|
||||
mRefreshLayout?.autoRefresh()
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
@ -232,24 +232,24 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
|
|||
(attachContext as OnRefreshedListener).onSuccess(forumPageBean)
|
||||
}
|
||||
}
|
||||
mRefreshLayout.finishRefresh()
|
||||
mRefreshLayout?.finishRefresh()
|
||||
mDataBean = forumPageBean
|
||||
pageSize = forumPageBean.page?.pageSize?.toInt()!!
|
||||
forumAdapter.setData(forumPageBean)
|
||||
mRefreshLayout.setNoMoreData(mDataBean!!.page?.hasMore == "0")
|
||||
mRefreshLayout?.setNoMoreData(mDataBean!!.page?.hasMore == "0")
|
||||
reloadAdapters()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun onRefresh() {
|
||||
mRefreshLayout.autoRefresh()
|
||||
mRefreshLayout?.autoRefresh()
|
||||
}
|
||||
|
||||
override fun onSwitch(which: Int) {
|
||||
if (isGood && mDataBean != null) {
|
||||
classifyId = mDataBean!!.forum?.goodClassify?.get(which)?.classId!!
|
||||
mRefreshLayout.autoRefresh()
|
||||
mRefreshLayout?.autoRefresh()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -265,7 +265,7 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
|
|||
internal inner class DataHolder : DataListener<ForumPageBean?> {
|
||||
override fun onDataArrived(forumPageBean: ForumPageBean?) {
|
||||
if (forumPageBean == null) {
|
||||
mRefreshLayout.autoRefresh()
|
||||
mRefreshLayout?.autoRefresh()
|
||||
return
|
||||
}
|
||||
if (!isGood) {
|
||||
|
|
@ -273,11 +273,11 @@ class ForumFragment : BaseFragment(), Refreshable, OnSwitchListener, ScrollTopab
|
|||
(attachContext as OnRefreshedListener).onSuccess(forumPageBean)
|
||||
}
|
||||
}
|
||||
mRefreshLayout.finishRefresh()
|
||||
mRefreshLayout?.finishRefresh()
|
||||
mDataBean = forumPageBean
|
||||
pageSize = forumPageBean.page?.pageSize?.toInt()!!
|
||||
forumAdapter.setData(forumPageBean)
|
||||
mRefreshLayout.setNoMoreData(mDataBean!!.page?.hasMore == "0")
|
||||
mRefreshLayout?.setNoMoreData(mDataBean!!.page?.hasMore == "0")
|
||||
reloadAdapters()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ import com.huanchengfly.tieba.post.models.ThreadHistoryInfoBean
|
|||
import com.huanchengfly.tieba.post.models.database.History
|
||||
import com.huanchengfly.tieba.post.utils.DateTimeUtils
|
||||
import com.huanchengfly.tieba.post.utils.HistoryUtil
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
class HistoryFragment : BaseFragment(), OnItemClickListener<History>, Refreshable {
|
||||
@BindView(R.id.recycler_view)
|
||||
|
|
@ -31,7 +30,7 @@ class HistoryFragment : BaseFragment(), OnItemClickListener<History>, Refreshabl
|
|||
private val todayHistoryAdapter: HistoryAdapter by lazy { HistoryAdapter(attachContext) }
|
||||
private val beforeHistoryAdapter: HistoryAdapter by lazy { HistoryAdapter(attachContext) }
|
||||
|
||||
private var type by Delegates.notNull<Int>()
|
||||
private var type = 0
|
||||
|
||||
companion object {
|
||||
const val PARAM_TYPE = "type"
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ class SearchForumFragment : BaseFragment(), ISearchFragment, OnItemClickListener
|
|||
@BindView(R.id.fragment_search_recycler_view)
|
||||
lateinit var recyclerView: RecyclerView
|
||||
|
||||
private var loaded: Boolean = false
|
||||
private var keyword: String? = null
|
||||
private val layoutManager: VirtualLayoutManager by lazy { VirtualLayoutManager(attachContext) }
|
||||
private val delegateAdapter: DelegateAdapter by lazy { DelegateAdapter(layoutManager) }
|
||||
|
|
@ -55,7 +56,7 @@ class SearchForumFragment : BaseFragment(), ISearchFragment, OnItemClickListener
|
|||
refreshLayout?.autoRefresh()
|
||||
} else {
|
||||
mData = null
|
||||
delegateAdapter.clear()
|
||||
if (loaded) delegateAdapter.clear()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -105,6 +106,7 @@ class SearchForumFragment : BaseFragment(), ISearchFragment, OnItemClickListener
|
|||
private fun reloadAdapters() {
|
||||
delegateAdapter.clear()
|
||||
if (mData != null) {
|
||||
loaded = true
|
||||
if (mData!!.exactMatch != null) {
|
||||
exactMatchAdapter.setData(listOf(mData!!.exactMatch!!))
|
||||
delegateAdapter.addAdapter(HeaderDelegateAdapter(
|
||||
|
|
|
|||
Loading…
Reference in New Issue