|
|
@@ -12,7 +12,6 @@ import com.adealink.frame.log.Log
|
|
|
import com.adealink.frame.mvvm.lifecycle.observeOnDestroy
|
|
|
import com.adealink.frame.mvvm.view.viewBinding
|
|
|
import com.adealink.weparty.commonui.BaseFragment
|
|
|
-import com.adealink.weparty.commonui.ext.show
|
|
|
import com.adealink.weparty.commonui.recycleview.adapter.MultiTypeListAdapter
|
|
|
import com.adealink.weparty.commonui.recycleview.diffutil.BaseListDiffUtil
|
|
|
import com.adealink.weparty.module.rank.data.CoupleRankListResult
|
|
|
@@ -41,6 +40,8 @@ import kotlin.math.abs
|
|
|
class RankListFragment : BaseFragment(R.layout.fragment_rank_list) {
|
|
|
|
|
|
companion object {
|
|
|
+ const val TAG = "RankListFragment"
|
|
|
+
|
|
|
fun newInstance(
|
|
|
type: Int = TYPE_TOP_GIFT, time: Int = TIME_DAILY, gender: Int = TYPE_ALL
|
|
|
): RankListFragment {
|
|
|
@@ -61,6 +62,7 @@ class RankListFragment : BaseFragment(R.layout.fragment_rank_list) {
|
|
|
private val listAdapter by lazy { MultiTypeListAdapter(BaseListDiffUtil()) }
|
|
|
private val rankListViewModel by viewModels<RankListViewModel> { RankViewModelFactory() }
|
|
|
private val binding by viewBinding(FragmentRankListBinding::bind)
|
|
|
+ //切换榜单、刷新、筛选时触发
|
|
|
private val scrollTopRunnable = Runnable {
|
|
|
if (!isUIValid()) {
|
|
|
return@Runnable
|
|
|
@@ -72,6 +74,15 @@ class RankListFragment : BaseFragment(R.layout.fragment_rank_list) {
|
|
|
private var rankLayoutChangeWrapper: RankLayoutChangeWrapper? = null
|
|
|
private val rankListCache: MutableList<RankItemData> = mutableListOf()
|
|
|
private var showPreviousRank = false
|
|
|
+ private var isScrollListenerExist = false
|
|
|
+ private val bgDrawableRes
|
|
|
+ get() = when(type) {
|
|
|
+ TYPE_TOP_GIFT -> R.drawable.rank_wealth_previous_bg
|
|
|
+ TYPE_TOP_STAR -> R.drawable.rank_charm_previous_bg
|
|
|
+ TYPE_TOP_PARTY -> R.drawable.rank_room_previous_bg
|
|
|
+ TYPE_TOP_CP -> R.drawable.rank_cp_previous_bg
|
|
|
+ else -> 0
|
|
|
+ }
|
|
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
|
super.onViewCreated(view, savedInstanceState)
|
|
|
@@ -82,17 +93,17 @@ class RankListFragment : BaseFragment(R.layout.fragment_rank_list) {
|
|
|
|
|
|
override fun initViews() {
|
|
|
parseIntent()
|
|
|
- rankLayoutChangeWrapper = RankLayoutChangeWrapper(binding, type)
|
|
|
+ rankLayoutChangeWrapper = RankLayoutChangeWrapper(this, binding, type).also { it.attach() }
|
|
|
listAdapter.register(RankItemViewBinder())
|
|
|
listAdapter.register(CoupleRankItemViewBinder())
|
|
|
listAdapter.register(RankListErrorEmptyViewBinder())
|
|
|
binding.rvRankList.layoutManager = LinearLayoutManager(requireActivity())
|
|
|
binding.rvRankList.adapter = listAdapter
|
|
|
- updateUIStyle(time)
|
|
|
binding.refreshLayout.setEnableLoadMore(false)
|
|
|
binding.refreshLayout.setOnRefreshListener {
|
|
|
- requestListData()
|
|
|
+ requestListData(showPreviousRank)
|
|
|
}
|
|
|
+ binding.tvPrevious.setBackgroundResource(bgDrawableRes)
|
|
|
binding.tvPrevious.setOnClickListener {
|
|
|
showPreviousRank = !showPreviousRank
|
|
|
if (showPreviousRank) {
|
|
|
@@ -103,6 +114,7 @@ class RankListFragment : BaseFragment(R.layout.fragment_rank_list) {
|
|
|
requestListData()
|
|
|
}
|
|
|
}
|
|
|
+ requestListData(showPreviousRank)
|
|
|
}
|
|
|
|
|
|
private fun parseIntent() {
|
|
|
@@ -121,7 +133,7 @@ class RankListFragment : BaseFragment(R.layout.fragment_rank_list) {
|
|
|
}
|
|
|
|
|
|
private fun requestListData(pullHistory: Boolean = false) {
|
|
|
- Log.d("PWL", "requestListData type: $type, time: $time, gender: $gender, pullHistory: $pullHistory")
|
|
|
+ Log.d(TAG, "requestListData type: $type, time: $time, gender: $gender, pullHistory: $pullHistory")
|
|
|
when(type) {
|
|
|
TYPE_TOP_GIFT,
|
|
|
TYPE_TOP_STAR -> {
|
|
|
@@ -136,19 +148,11 @@ class RankListFragment : BaseFragment(R.layout.fragment_rank_list) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 切换榜单类型时,改变UI风格;
|
|
|
- */
|
|
|
- fun updateUIStyle(time: Int) {
|
|
|
+ fun scrollToTop() {
|
|
|
if (!isViewBindingValid()) {
|
|
|
return
|
|
|
}
|
|
|
- this.time = time
|
|
|
- binding.tvPrevious.show(type == TYPE_TOP_GIFT)
|
|
|
- showPreviousRank = false
|
|
|
- binding.tvPrevious.text = getCompatString(R.string.rank_previous)
|
|
|
binding.rvRankList.post(scrollTopRunnable)
|
|
|
- requestListData()
|
|
|
}
|
|
|
|
|
|
fun updateByGender(gender: Int) {
|
|
|
@@ -173,6 +177,7 @@ class RankListFragment : BaseFragment(R.layout.fragment_rank_list) {
|
|
|
|
|
|
// ---- 排行榜列表 ---- Start
|
|
|
private fun resultGetRankList(result: RankListResult) {
|
|
|
+ binding.rvRankList.post(scrollTopRunnable)
|
|
|
binding.refreshLayout.finishRefresh()
|
|
|
if(!result.isNetOK) {
|
|
|
rankLayoutChangeWrapper?.updateRankList(emptyList())
|
|
|
@@ -203,6 +208,7 @@ class RankListFragment : BaseFragment(R.layout.fragment_rank_list) {
|
|
|
}
|
|
|
|
|
|
private fun resultGetCoupleRankList(result: CoupleRankListResult) {
|
|
|
+ binding.rvRankList.post(scrollTopRunnable)
|
|
|
binding.refreshLayout.finishRefresh()
|
|
|
if(!result.isNetOK) {
|
|
|
rankLayoutChangeWrapper?.updateCoupleList(emptyList())
|
|
|
@@ -237,10 +243,10 @@ class RankListFragment : BaseFragment(R.layout.fragment_rank_list) {
|
|
|
}
|
|
|
|
|
|
fun setOnAppBarScrollChangeListener(onScrollChange: (Float) -> Unit) {
|
|
|
- if (!isViewBindingValid()) {
|
|
|
+ if (!isViewBindingValid() || isScrollListenerExist) {
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
+ isScrollListenerExist = true
|
|
|
val layoutParams = binding.appBarLayout.layoutParams as CoordinatorLayout.LayoutParams
|
|
|
val behavior = layoutParams.behavior
|
|
|
if (behavior is AppBarLayout.Behavior) {
|