|
|
@@ -1,15 +1,10 @@
|
|
|
package com.adealink.weparty.room.roomlist
|
|
|
|
|
|
-import android.graphics.Typeface
|
|
|
import android.os.Bundle
|
|
|
-import android.util.TypedValue
|
|
|
-import android.view.LayoutInflater
|
|
|
-import androidx.constraintlayout.widget.ConstraintLayout
|
|
|
import androidx.core.view.updateLayoutParams
|
|
|
import androidx.fragment.app.Fragment
|
|
|
import androidx.recyclerview.widget.RecyclerView
|
|
|
import androidx.viewpager2.widget.ViewPager2
|
|
|
-import com.adealink.frame.aab.util.getCompatColor
|
|
|
import com.adealink.frame.aab.util.getCompatString
|
|
|
import com.adealink.frame.base.Rlt
|
|
|
import com.adealink.frame.base.fastLazy
|
|
|
@@ -21,10 +16,7 @@ import com.adealink.frame.router.annotation.RouterUri
|
|
|
import com.adealink.frame.util.DisplayUtil
|
|
|
import com.adealink.weparty.AppModule
|
|
|
import com.adealink.weparty.commonui.BaseFragment
|
|
|
-import com.adealink.weparty.commonui.ext.dp
|
|
|
-import com.adealink.weparty.commonui.ext.gone
|
|
|
import com.adealink.weparty.commonui.ext.setOverScrollModeToNever
|
|
|
-import com.adealink.weparty.commonui.ext.show
|
|
|
import com.adealink.weparty.commonui.recycleview.adapter.BaseTabFragmentStateAdapter
|
|
|
import com.adealink.weparty.module.room.Room
|
|
|
import com.adealink.weparty.module.search.Search
|
|
|
@@ -32,16 +24,13 @@ import com.adealink.weparty.room.R
|
|
|
import com.adealink.weparty.room.data.EnterRoomInfo
|
|
|
import com.adealink.weparty.room.data.JoinRoomFrom
|
|
|
import com.adealink.weparty.room.databinding.FragmentRoomListBinding
|
|
|
-import com.adealink.weparty.room.databinding.TabRoomListBinding
|
|
|
import com.adealink.weparty.room.roomlist.mine.MineRoomListFragment
|
|
|
import com.adealink.weparty.room.roomlist.popular.PopularRoomListFragment
|
|
|
+import com.adealink.weparty.ui.IScrollManager
|
|
|
import com.adealink.weparty.ui.listener.setOnGameClick
|
|
|
-import com.google.android.material.tabs.TabLayout
|
|
|
-import com.google.android.material.tabs.TabLayoutMediator
|
|
|
-import com.adealink.weparty.R as APP_R
|
|
|
|
|
|
@RouterUri(path = [Room.RoomList.PATH], desc = "首页房间列表")
|
|
|
-class RoomListFragment : BaseFragment(R.layout.fragment_room_list) {
|
|
|
+class RoomListFragment : BaseFragment(R.layout.fragment_room_list), IScrollManager {
|
|
|
|
|
|
companion object {
|
|
|
const val TAB_INDEX_MINE = 0
|
|
|
@@ -67,11 +56,8 @@ class RoomListFragment : BaseFragment(R.layout.fragment_room_list) {
|
|
|
private var currentPageIndex = TAB_INDEX_POPULAR
|
|
|
|
|
|
override fun initViews() {
|
|
|
- val statusBarHeight = activity?.let {
|
|
|
- DisplayUtil.getStatusBarHeight(it)
|
|
|
- } ?: 0
|
|
|
- binding.clTop.updateLayoutParams<ConstraintLayout.LayoutParams> {
|
|
|
- height = 48.5f.dp() + statusBarHeight
|
|
|
+ binding.spaceStatusBar.updateLayoutParams {
|
|
|
+ height = DisplayUtil.getStatusBarHeight(requireActivity())
|
|
|
}
|
|
|
|
|
|
roomListPageAdapter = RoomListPageAdapter()
|
|
|
@@ -90,63 +76,20 @@ class RoomListFragment : BaseFragment(R.layout.fragment_room_list) {
|
|
|
}
|
|
|
|
|
|
private fun initTabs() {
|
|
|
- val activity = activity ?: return
|
|
|
- TabLayoutMediator(binding.tabLayout, binding.roomListViewPage) { tab, position ->
|
|
|
- val tabBinding = TabRoomListBinding.inflate(
|
|
|
- LayoutInflater.from(activity),
|
|
|
- null,
|
|
|
- false
|
|
|
- )
|
|
|
- tab.customView = tabBinding.root
|
|
|
- tabBinding.tabTitle.text = roomListPageAdapter.getTabName(position)
|
|
|
- updateTabView(tab, currentPageIndex == TABS[position])
|
|
|
- }.attach()
|
|
|
- binding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
|
|
|
- override fun onTabSelected(tab: TabLayout.Tab?) {
|
|
|
- updateTabView(tab, true)
|
|
|
+ binding.commonTabLayout.createMediatorAndAttach(
|
|
|
+ viewPager2 = binding.roomListViewPage,
|
|
|
+ tabFragmentStateAdapter = roomListPageAdapter,
|
|
|
+ currentItem = 0,
|
|
|
+ scrollToTop = {
|
|
|
+ scrollToTop()
|
|
|
}
|
|
|
-
|
|
|
- override fun onTabUnselected(tab: TabLayout.Tab?) {
|
|
|
- updateTabView(tab, false)
|
|
|
- }
|
|
|
-
|
|
|
- override fun onTabReselected(tab: TabLayout.Tab?) {
|
|
|
- }
|
|
|
- })
|
|
|
+ )
|
|
|
binding.roomListViewPage.registerOnPageChangeCallback(object :
|
|
|
ViewPager2.OnPageChangeCallback() {
|
|
|
override fun onPageSelected(position: Int) {
|
|
|
currentPageIndex = TABS[position]
|
|
|
}
|
|
|
})
|
|
|
-
|
|
|
- val defaultPos = if (subTabKey == "hot") {
|
|
|
- 0
|
|
|
- } else if (subTabKey == "mine") {
|
|
|
- 1
|
|
|
- } else {
|
|
|
- 0
|
|
|
- }
|
|
|
- binding.roomListViewPage.setCurrentItem(defaultPos, false)
|
|
|
- }
|
|
|
-
|
|
|
- private fun updateTabView(tab: TabLayout.Tab?, isSelected: Boolean) {
|
|
|
- tab?.customView?.let {
|
|
|
- val customViewBinding = TabRoomListBinding.bind(it)
|
|
|
- if (isSelected) {
|
|
|
- customViewBinding.tabTitle.setMarqueeEnable(true)
|
|
|
- customViewBinding.tabTitle.setTextColor(getCompatColor(APP_R.color.black))
|
|
|
- customViewBinding.tabTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f)
|
|
|
- customViewBinding.tabTitle.setTypeface(null, Typeface.BOLD)
|
|
|
- customViewBinding.ivSelected.show()
|
|
|
- } else {
|
|
|
- customViewBinding.tabTitle.setMarqueeEnable(false)
|
|
|
- customViewBinding.tabTitle.setTextColor(getCompatColor(APP_R.color.color_222222))
|
|
|
- customViewBinding.tabTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16f)
|
|
|
- customViewBinding.tabTitle.setTypeface(null, Typeface.NORMAL)
|
|
|
- customViewBinding.ivSelected.gone()
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
private fun onRoomCreateClick() {
|
|
|
@@ -199,4 +142,11 @@ class RoomListFragment : BaseFragment(R.layout.fragment_room_list) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ override fun scrollToTop() {
|
|
|
+ val fg = roomListPageAdapter.getFragment(this, binding.roomListViewPage.currentItem)
|
|
|
+ if (fg is IScrollManager) {
|
|
|
+ fg.scrollToTop()
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|