增加首页自动刷新逻辑

This commit is contained in:
huangjian
2021-12-15 11:51:51 +08:00
parent bb10359612
commit ca07eb1814
12 changed files with 81 additions and 107 deletions

View File

@@ -61,7 +61,7 @@ public class PartyMagicIndicatorAdapter extends CommonNavigatorAdapter {
@Override
public IPagerIndicator getIndicator(Context context) {
WrapPagerIndicator indicator = new WrapPagerIndicator(context);
indicator.setFillColor(Color.parseColor("#FFFFA936"));
indicator.setFillColor(Color.parseColor("#FFFFCB47"));
return indicator;
}

View File

@@ -1,5 +1,6 @@
package com.yizhuan.erban.home.fragment
import android.annotation.SuppressLint
import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
@@ -17,9 +18,14 @@ import com.yizhuan.erban.ui.widget.OnPageSelectedListener
import com.yizhuan.erban.ui.widget.magicindicator.ViewPagerHelper
import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.yizhuan.xchat_android_core.UriProvider
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 io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import org.greenrobot.eventbus.EventBus
import java.util.*
import java.util.concurrent.TimeUnit
/**
* 大鹅开黑首页
@@ -54,8 +60,15 @@ class HomeFragment : BaseFragment(), View.OnClickListener,
mBinding.click = this
}
@SuppressLint("CheckResult")
override fun initiate() {
initTitleTab()
Observable.interval(15,TimeUnit.SECONDS)
.compose(bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
EventBus.getDefault().post(RefreshHomeDataEvent())
}
}
/**

View File

@@ -92,7 +92,7 @@ public class HomePlayFragment extends BaseFragment {
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onLoadLoginUserInfoEvent(RefreshHomeDataEvent event) {
public void onRefreshHomeDataEvent(RefreshHomeDataEvent event) {
loadData(true);
}

View File

@@ -17,12 +17,16 @@ import com.yizhuan.erban.base.BaseFragment;
import com.yizhuan.erban.common.NoDataFragment;
import com.yizhuan.erban.home.adapter.HomeRoomFragmentAdapter;
import com.yizhuan.xchat_android_core.home.bean.HomeTabMapInfo;
import com.yizhuan.xchat_android_core.home.event.RefreshHomeDataEvent;
import com.yizhuan.xchat_android_core.home.model.GameHomeModel;
import com.yizhuan.xchat_android_core.initial.InitialModel;
import com.yizhuan.xchat_android_core.utils.net.RxHelper;
import com.yizhuan.xchat_android_library.utils.ListUtils;
import com.yizhuan.xchat_android_library.utils.log.MLog;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -35,57 +39,18 @@ import java.util.concurrent.CancellationException;
*/
public class HomeTabHomeFragment extends BaseFragment {
public static final int ROWS = 3;
private static final String PARAM_TAB_ID = "tabId";
private static final Comparator<HomeTabMapInfo> comp = (o1, o2) -> {
int seq = o1.getSeq() - o2.getSeq();
return Integer.compare(seq, 0);
};
private RecyclerView recyclerView;
private String tabId;
private HomeRoomFragmentAdapter mHomeRoomAdapter;
private Handler handler = new Handler();
private Runnable runnable;
public static HomeTabHomeFragment newInstance(int tabId) {
Bundle args = new Bundle();
args.putString(PARAM_TAB_ID, String.valueOf(tabId));
public static HomeTabHomeFragment newInstance() {
HomeTabHomeFragment fragment = new HomeTabHomeFragment();
fragment.setArguments(args);
return fragment;
}
public HomeTabHomeFragment() {
// Required empty public constructor
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
tabId = getArguments().getString(PARAM_TAB_ID);
}
}
@Override
public void onDestroy() {
super.onDestroy();
stopTimer();
}
@Override
public void onPause() {
super.onPause();
// stopTimer();
}
private void stopTimer() {
handler.removeCallbacks(runnable);
runnable = null;
}
@Override
public void onResume() {
super.onResume();
}
@Override
public int getRootLayoutId() {
return R.layout.fragment_home_room_tab;
@@ -98,14 +63,13 @@ public class HomeTabHomeFragment extends BaseFragment {
initRecyclerView();
}
/**
* 请求数据
*/
@SuppressLint("CheckResult")
private void getData() {
GameHomeModel.get()
.getHomeTabHome(tabId)
.getHomeTabHome()
.compose(RxHelper.handleSchedulers())
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
.subscribe((serviceResult, throwable) -> {
@@ -146,20 +110,6 @@ public class HomeTabHomeFragment extends BaseFragment {
List<HomeTabMapInfo> finalList1 = new ArrayList<>(finalList);//最终的6条数据
List<HomeTabMapInfo> randomList1 = new ArrayList<>(randomList);//不是置顶的
mHomeRoomAdapter.setNewData(getConvertData(finalList1, randomList1));
int REFRESH_SPEED = InitialModel.get().getRoomRefresh() > 0 ? InitialModel.get().getRoomRefresh() * 1000 : 10000;//默认10秒
if (runnable != null) {
handler.removeCallbacks(runnable);
}
runnable = new Runnable() {
@Override
public void run() {
if (getActivity() != null) {
mHomeRoomAdapter.setNewData(getConvertData(finalList1, randomList1));
handler.postDelayed(this, REFRESH_SPEED);
}
}
};
handler.postDelayed(runnable, REFRESH_SPEED);
}
private void initRecyclerView() {
@@ -213,11 +163,6 @@ public class HomeTabHomeFragment extends BaseFragment {
Collections.sort(list, comp);
}
private static Comparator<HomeTabMapInfo> comp = (o1, o2) -> {
int seq = o1.getSeq() - o2.getSeq();
return Integer.compare(seq, 0);
};
private List<HomeTabMapInfo> randomList(List<HomeTabMapInfo> sourceList) {
if (sourceList == null || sourceList.size() == 0) {
return sourceList;
@@ -237,30 +182,9 @@ public class HomeTabHomeFragment extends BaseFragment {
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
@Subscribe(threadMode = ThreadMode.MAIN)
public void onRefreshHomeDataEvent(RefreshHomeDataEvent event) {
getData();
}
@SuppressLint("ResourceType")
@Override
public void showNoData(View view, int drawable, CharSequence charSequence) {
if (!checkActivityValid()) {
return;
}
if (view == null) {
MLog.error(this, "xuwakao, showNoData view is NULL");
return;
}
View status = view.findViewById(R.id.status_layout);
if (status == null || status.getId() <= 0) {
MLog.error(this, "xuwakao, had not set layout id ");
return;
}
NoDataFragment fragment = NoDataFragment.newInstance(R.layout.layout_home_empty_no_header, drawable, charSequence);
fragment.setListener(getLoadListener());
getChildFragmentManager().beginTransaction().replace(status.getId(), fragment, STATUS_TAG).commitAllowingStateLoss();
}
}

View File

@@ -116,7 +116,7 @@ class PartyFragment : BaseFragment(), PartyMagicIndicatorAdapter.OnItemSelectLis
magicIndicatorAdapter.setOnItemSelectListener(this)
commonNavigator.adapter = magicIndicatorAdapter
mBinding.magicIndicator.navigator = commonNavigator
mBinding.viewPager.offscreenPageLimit = 5
mBinding.viewPager.offscreenPageLimit = 2
mBinding.viewPager.adapter = RoomVPAdapter(
childFragmentManager,
mFragments
@@ -133,7 +133,7 @@ class PartyFragment : BaseFragment(), PartyMagicIndicatorAdapter.OnItemSelectLis
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) homeViewModel.getTagInfo()
}
override fun onItemSelect(position: Int, view: TextView?) {

View File

@@ -72,7 +72,7 @@ class RecommendFragment : BaseFragment(),
initTitleTab()
childFragmentManager
.beginTransaction()
.replace(R.id.fg_recommend_room, HomeTabHomeFragment.newInstance(0))
.replace(R.id.fg_recommend_room, HomeTabHomeFragment.newInstance())
.commitAllowingStateLoss()
homeViewModel.bannerLiveData.observe(this) {
@@ -185,8 +185,10 @@ class RecommendFragment : BaseFragment(),
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
homeViewModel.getBannerInfo()
homeViewModel.getHomeResource()
if (isResumed) {
homeViewModel.getBannerInfo()
homeViewModel.getHomeResource()
}
}

View File

@@ -12,6 +12,9 @@ import com.yizhuan.erban.home.HomeViewModel
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 org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class RoomCommonFragment : BaseViewBindingFragment<FragmentRoomCommonBinding>() {
@@ -29,12 +32,13 @@ class RoomCommonFragment : BaseViewBindingFragment<FragmentRoomCommonBinding>()
private var pageNum: Int = 1
private val pageSize = 20
private val mAdapter = RoomCommonAdapter()
private lateinit var mAdapter: RoomCommonAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val homeViewModel: HomeViewModel by viewModels()
override fun init() {
mAdapter = RoomCommonAdapter()
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(mAdapter)
.setLayoutManager(LinearLayoutManager(mContext))
@@ -64,9 +68,14 @@ class RoomCommonFragment : BaseViewBindingFragment<FragmentRoomCommonBinding>()
}
@SuppressLint("CheckResult")
fun loadData(isRefresh: Boolean) {
fun loadData(isRefresh: Boolean) {
binding.refreshLayout.isRefreshing = isRefresh
pageNum = if (isRefresh) 1 else (pageNum + 1)
homeViewModel.getCommonRoom(tabID, pageNum, pageSize)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) loadData(true)
}
}

View File

@@ -11,6 +11,9 @@ import com.yizhuan.erban.home.HomeViewModel
import com.yizhuan.erban.home.adapter.RoomGameAdapter
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 org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class RoomGameFragment : BaseViewBindingFragment<FragmentRoomGameBinding>() {
@@ -23,13 +26,14 @@ class RoomGameFragment : BaseViewBindingFragment<FragmentRoomGameBinding>() {
}
}
private val roomHotAdapter = RoomGameAdapter()
private lateinit var roomHotAdapter : RoomGameAdapter
private var page = 1
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val pageSize = 20
private val homeViewModel: HomeViewModel by activityViewModels()
override fun init() {
roomHotAdapter = RoomGameAdapter()
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(roomHotAdapter)
.setRecyclerView(binding.recyclerView)
@@ -75,4 +79,9 @@ class RoomGameFragment : BaseViewBindingFragment<FragmentRoomGameBinding>() {
}
homeViewModel.getGameRoom(page, pageSize)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) loadData(true)
}
}

View File

@@ -10,6 +10,9 @@ import com.yizhuan.erban.home.HomeViewModel
import com.yizhuan.erban.home.adapter.RoomHotAdapter
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 org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class RoomHotFragment : BaseViewBindingFragment<FragmentRoomHotBinding>() {
@@ -23,13 +26,15 @@ class RoomHotFragment : BaseViewBindingFragment<FragmentRoomHotBinding>() {
}
}
private val roomHotAdapter = RoomHotAdapter()
private var page = 1
private lateinit var roomHotAdapter : RoomHotAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private var page = 1
private val pageSize = Int.MAX_VALUE
private val homeViewModel: HomeViewModel by activityViewModels()
override fun init() {
roomHotAdapter = RoomHotAdapter()
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(roomHotAdapter)
.setRecyclerView(binding.recyclerView)
@@ -51,4 +56,9 @@ class RoomHotFragment : BaseViewBindingFragment<FragmentRoomHotBinding>() {
private fun loadData(isRefresh: Boolean) {
homeViewModel.getHotRoom(page, pageSize)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) loadData(true)
}
}

View File

@@ -15,6 +15,9 @@ import com.yizhuan.erban.home.adapter.RoomLikeAdapter
import com.yizhuan.erban.ui.relation.AttentionListActivity
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 org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class RoomLikeFragment : BaseViewBindingFragment<FragmentRoomLikeBinding>() {
@@ -28,10 +31,10 @@ class RoomLikeFragment : BaseViewBindingFragment<FragmentRoomLikeBinding>() {
}
}
private val concernsAdapter = HomeConcernsAdapter()
private lateinit var concernsAdapter : HomeConcernsAdapter
private lateinit var likeRvDelegate: RVDelegate<HomeRoomInfo>
private val mAdapter = RoomLikeAdapter()
private lateinit var mAdapter : RoomLikeAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private var pageNum = 1
private val pageSize = 20
@@ -43,7 +46,7 @@ class RoomLikeFragment : BaseViewBindingFragment<FragmentRoomLikeBinding>() {
AppBarLayout.OnOffsetChangedListener { _, verticalOffset ->
binding.refreshLayout.isEnabled = verticalOffset == 0
})
concernsAdapter = HomeConcernsAdapter()
likeRvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(concernsAdapter)
.setRecyclerView(binding.rvLike)
@@ -57,7 +60,7 @@ class RoomLikeFragment : BaseViewBindingFragment<FragmentRoomLikeBinding>() {
binding.tvLike.isGone = isGone
binding.rvLike.isGone = isGone
}
mAdapter = RoomLikeAdapter()
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(mAdapter)
.setLayoutManager(LinearLayoutManager(mContext))
@@ -112,5 +115,9 @@ class RoomLikeFragment : BaseViewBindingFragment<FragmentRoomLikeBinding>() {
homeViewModel.getCollectRoom(pageNum, pageSize)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) loadData(true)
}
}

View File

@@ -35,7 +35,7 @@
android:layout_marginEnd="2dp"
android:ellipsize="end"
android:lines="1"
android:textColor="@color/white"
android:textColor="@color/text_title_white"
android:textSize="15sp"
tools:text="我的我的我的我的我的我的"
app:layout_flexShrink="1"

View File

@@ -35,7 +35,7 @@ public class GameHomeModel extends BaseModel {
}
public Single<List<HomeTabMapInfo>> getHomeTabHome(String tabId) {
public Single<List<HomeTabMapInfo>> getHomeTabHome() {
return api.apiHomeTabHome(null, String.valueOf(AuthModel.get().getCurrentUid()),
CommunityConstant.VERSION_VALID_TYPE,
AuthModel.get().getTicket())