[Modify]优化首页加载

This commit is contained in:
wushaocheng
2022-12-07 17:39:59 +08:00
parent b302e8d41a
commit 211d55ad12
8 changed files with 99 additions and 71 deletions

View File

@@ -0,0 +1,25 @@
package com.yizhuan.erban.avroom.adapter
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.Lifecycle
import androidx.viewpager2.adapter.FragmentStateAdapter
/**
* ViewPager2适配器
* Created by wushaocheng on 2022/12/07.
*/
class CommonVPAdapter(
fm: FragmentManager,
lifecycle: Lifecycle,
private val fragmentList: List<Fragment>
) : FragmentStateAdapter(fm, lifecycle) {
override fun getItemCount(): Int {
return fragmentList.size
}
override fun createFragment(position: Int): Fragment {
return fragmentList[position]
}
}

View File

@@ -1,18 +1,16 @@
package com.yizhuan.erban.home.fragment
import android.annotation.SuppressLint
import android.view.Gravity
import android.view.View
import android.widget.TextView
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.yizhuan.erban.R
import com.yizhuan.erban.application.IReportConstants
import com.yizhuan.erban.application.ReportManager
import com.yizhuan.erban.avroom.adapter.RoomVPAdapter
import com.yizhuan.erban.base.BaseFragment
import com.yizhuan.erban.avroom.adapter.CommonVPAdapter
import com.yizhuan.erban.base.BaseViewBindingFragment
import com.yizhuan.erban.databinding.FragmentHomeBinding
import com.yizhuan.erban.home.HomeViewModel
import com.yizhuan.erban.home.adapter.PartyMagicIndicatorAdapter
@@ -24,21 +22,17 @@ import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.Commo
import com.yizhuan.xchat_android_core.DemoCache
import com.yizhuan.xchat_android_core.UriProvider
import com.yizhuan.xchat_android_core.home.bean.HomeTagInfo
import com.yizhuan.xchat_android_core.home.event.RefreshHomeDataEvent
import com.yizhuan.xchat_android_core.statistic.StatisticManager
import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol
import com.yizhuan.xchat_android_library.common.util.Logger
import com.yizhuan.xchat_android_library.utils.ResUtil
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
* Peko首页
*/
class HomeFragment : BaseFragment(), View.OnClickListener,
class HomeFragment : BaseViewBindingFragment<FragmentHomeBinding>(), View.OnClickListener,
PartyMagicIndicatorAdapter.OnItemSelectListener {
private lateinit var mBinding: FragmentHomeBinding
private val mFragments: ArrayList<Fragment> = ArrayList()
private val mTabInfoList: ArrayList<HomeTagInfo> = ArrayList()
private val homeViewModel: HomeViewModel by activityViewModels()
@@ -47,6 +41,16 @@ class HomeFragment : BaseFragment(), View.OnClickListener,
private const val TAG = "HomeFragment"
}
override fun init() {
initTitleTab()
homeViewModel.tagLiveData.observe(this) {
it?.let {
onGetHomeTagSuccess(it)
}
}
homeViewModel.getTagInfo()
}
override fun onClick(v: View) {
when (v.id) {
R.id.iv_search -> {
@@ -91,29 +95,6 @@ class HomeFragment : BaseFragment(), View.OnClickListener,
}
}
override fun getRootLayoutId(): Int {
return R.layout.fragment_home
}
override fun onFindViews() {
mBinding = DataBindingUtil.bind(mView)!!
}
override fun onSetListener() {
mBinding.click = this
}
@SuppressLint("CheckResult")
override fun initiate() {
initTitleTab()
homeViewModel.tagLiveData.observe(this) {
it?.let {
onGetHomeTagSuccess(it)
}
}
homeViewModel.getTagInfo()
}
private fun onGetHomeTagSuccess(info: List<HomeTagInfo>) {
var changed = false
mTabInfoList.filter { it.id != 6 }
@@ -126,7 +107,7 @@ class HomeFragment : BaseFragment(), View.OnClickListener,
}
//只有HomeTagInfo发生改变才刷新数据
if (changed) {
Logger.info(TAG,"oldTabInfoList:change");
Logger.info(TAG, "oldTabInfoList:change");
mTabInfoList.clear()
mFragments.clear()
mTabInfoList.add(
@@ -169,21 +150,12 @@ class HomeFragment : BaseFragment(), View.OnClickListener,
magicIndicatorAdapter.textSize = 14
magicIndicatorAdapter.setOnItemSelectListener(this)
commonNavigator.adapter = magicIndicatorAdapter
mBinding.magicIndicator.navigator = commonNavigator
mBinding.viewPager.offscreenPageLimit = 2
mBinding.viewPager.adapter = RoomVPAdapter(
childFragmentManager,
mFragments
)
ViewPagerHelper.bind(mBinding.magicIndicator, mBinding.viewPager)
binding.magicIndicator.navigator = commonNavigator
binding.viewPager.adapter = CommonVPAdapter(childFragmentManager, lifecycle, mFragments)
ViewPagerHelper.bind(binding.magicIndicator, binding.viewPager)
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) homeViewModel.getTagInfo()
}
/**
* 初始化推荐
*/
@@ -204,14 +176,13 @@ class HomeFragment : BaseFragment(), View.OnClickListener,
magicIndicatorAdapter.textSize = 14
magicIndicatorAdapter.setOnItemSelectListener(this)
commonNavigator.adapter = magicIndicatorAdapter
mBinding.magicIndicator.navigator = commonNavigator
mBinding.viewPager.offscreenPageLimit = 2
mBinding.viewPager.adapter = RoomVPAdapter(childFragmentManager, mFragments)
ViewPagerHelper.bind(mBinding.magicIndicator, mBinding.viewPager)
binding.magicIndicator.navigator = commonNavigator
binding.viewPager.adapter = CommonVPAdapter(childFragmentManager, lifecycle, mFragments)
ViewPagerHelper.bind(binding.magicIndicator, binding.viewPager)
}
override fun onItemSelect(position: Int, view: TextView?) {
mBinding.viewPager.currentItem = position
binding.viewPager.currentItem = position
//点击顶部tab上报
val map = HashMap<String, Any>(3)
map[IReportConstants.HOMEPAGE_TAB] = mTabInfoList[position].id

View File

@@ -206,7 +206,7 @@ public class HomeTabHomeFragment extends BaseFragment {
@Subscribe(threadMode = ThreadMode.MAIN)
public void onRefreshHomeDataEvent(RefreshHomeDataEvent event) {
if (isResumed()) getData();
// if (isResumed()) getData();
}
}

View File

@@ -19,11 +19,8 @@ import com.yizhuan.erban.home.helper.BannerHelper
import com.yizhuan.erban.home.helper.OpenRoomHelper
import com.yizhuan.xchat_android_core.home.bean.HomeRoomInfo
import com.yizhuan.xchat_android_core.home.event.RefreshHomeDataEvent
import com.yizhuan.xchat_android_core.statistic.StatisticManager
import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol
import com.yizhuan.xchat_android_core.user.UserModel
import com.yizhuan.xchat_android_core.user.event.LoginUserInfoUpdateEvent
import com.yizhuan.xchat_android_library.utils.ResUtil
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode

View File

@@ -14,8 +14,6 @@ import com.yizhuan.erban.home.adapter.RoomCommonAdapter
import com.yizhuan.erban.ui.utils.RVDelegate
import com.yizhuan.xchat_android_core.home.bean.HomeRoomInfo
import com.yizhuan.xchat_android_core.home.event.RefreshHomeDataEvent
import com.yizhuan.xchat_android_core.statistic.StatisticManager
import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol
import com.yizhuan.xchat_android_library.utils.ResUtil
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
@@ -40,9 +38,11 @@ class RoomCommonFragment : BaseViewBindingFragment<FragmentRoomCommonBinding>()
private lateinit var mAdapter: RoomCommonAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val roomCommonViewModel: RoomCommonViewModel by viewModels()
private var roomCommonViewModel: RoomCommonViewModel? = null
override fun init() {
val roomCommonViewModel: RoomCommonViewModel by viewModels()
this.roomCommonViewModel = roomCommonViewModel
mAdapter = RoomCommonAdapter()
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(mAdapter)
@@ -55,10 +55,6 @@ class RoomCommonFragment : BaseViewBindingFragment<FragmentRoomCommonBinding>()
mAdapter.setOnItemClickListener { _, _, position ->
mAdapter.getItem(position)?.let {
AVRoomActivity.start(context, it.roomUid)
StatisticManager.Instance()
.onEvent("tab${tabID}_success_room", ResUtil.getString(R.string.home_fragment_roomcommonfragment_02))
StatisticManager.Instance()
.onEvent(StatisticsProtocol.EVENT_COMMON_TAB_ROOM_SUCCESS, ResUtil.getString(R.string.home_fragment_roomcommonfragment_03))
}
}
mAdapter.setOnLoadMoreListener({
@@ -82,7 +78,7 @@ class RoomCommonFragment : BaseViewBindingFragment<FragmentRoomCommonBinding>()
fun loadData(isRefresh: Boolean) {
binding.refreshLayout.isRefreshing = isRefresh
pageNum = if (isRefresh) 1 else (pageNum + 1)
roomCommonViewModel.getCommonRoom(tabID, pageNum, pageSize)
roomCommonViewModel?.getCommonRoom(tabID, pageNum, pageSize)
}
override fun onCreate(savedInstanceState: Bundle?) {
@@ -90,13 +86,13 @@ class RoomCommonFragment : BaseViewBindingFragment<FragmentRoomCommonBinding>()
EventBus.getDefault().register(this)
}
override fun onDestroy() {
super.onDestroy()
override fun onDestroyView() {
super.onDestroyView()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) loadData(true)
// if (isResumed) loadData(true)
}
}

View File

@@ -1,7 +1,7 @@
package com.yizhuan.erban.home.fragment
import android.os.Bundle
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.yizhuan.erban.R
import com.yizhuan.erban.avroom.activity.AVRoomActivity
@@ -33,14 +33,22 @@ class RoomGameFragment : BaseViewBindingFragment<FragmentRoomGameBinding>() {
private var page = 1
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val pageSize = 20
private val homeViewModel: HomeViewModel by activityViewModels()
private var homeViewModel: HomeViewModel? = null
override fun init() {
val homeViewModel: HomeViewModel by viewModels()
this.homeViewModel = homeViewModel
roomHotAdapter = RoomGameAdapter()
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(roomHotAdapter)
.setRecyclerView(binding.recyclerView)
.setEmptyView(EmptyViewHelper.createEmptyView(context, ResUtil.getString(R.string.home_fragment_roomgamefragment_01)))
.setEmptyView(
EmptyViewHelper.createEmptyView(
context,
ResUtil.getString(R.string.home_fragment_roomgamefragment_01)
)
)
.setLayoutManager(LinearLayoutManager(mContext))
.setRefreshLayout(binding.refreshLayout)
.setPageSize(pageSize)
@@ -80,7 +88,7 @@ class RoomGameFragment : BaseViewBindingFragment<FragmentRoomGameBinding>() {
} else {
page++
}
homeViewModel.getGameRoom(page, pageSize)
homeViewModel?.getGameRoom(page, pageSize)
}
override fun onCreate(savedInstanceState: Bundle?) {
@@ -95,6 +103,6 @@ class RoomGameFragment : BaseViewBindingFragment<FragmentRoomGameBinding>() {
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) loadData(true)
// if (isResumed) loadData(true)
}
}

View File

@@ -1,6 +1,7 @@
package com.yizhuan.erban.ui.widget.magicindicator;
import androidx.viewpager.widget.ViewPager;
import androidx.viewpager2.widget.ViewPager2;
/**
@@ -9,6 +10,35 @@ import androidx.viewpager.widget.ViewPager;
*/
public class ViewPagerHelper {
public static void bind(final MagicIndicator magicIndicator, ViewPager2 viewPager) {
if (viewPager == null) {
return;
}
viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (magicIndicator != null) {
magicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
}
@Override
public void onPageSelected(int position) {
if (magicIndicator != null) {
magicIndicator.onPageSelected(position);
}
}
@Override
public void onPageScrollStateChanged(int state) {
if (magicIndicator != null) {
magicIndicator.onPageScrollStateChanged(state);
}
}
});
}
public static void bind(final MagicIndicator magicIndicator, ViewPager viewPager) {
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@@ -28,4 +58,5 @@ public class ViewPagerHelper {
}
});
}
}

View File

@@ -84,7 +84,7 @@
android:layout_marginStart="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_12"/>
<androidx.viewpager.widget.ViewPager
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />