package com.liyu.fakeweather.ui.base; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import com.liyu.fakeweather.R; import com.liyu.fakeweather.event.GirlsComingEvent; import com.liyu.fakeweather.ui.girl.adapter.GirlsAdapter; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import rx.Subscription; /** * Created by liyu on 2016/10/31. */ public abstract class BaseGirlsListFragment extends BaseContentFragment { protected RecyclerView recyclerView; protected GirlsAdapter adapter; protected int currentPage = 1; protected boolean isLoading = false; protected Subscription subscription; protected int sendCount = 0; protected int receivedCount = 0; @Override protected int getLayoutId() { return R.layout.fragment_gank; } @Override protected void initViews() { super.initViews(); adapter = new GirlsAdapter(getActivity(), null); recyclerView = findView(R.id.rv_gank); final StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); recyclerView.setLayoutManager(layoutManager); recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (!recyclerView.canScrollVertically(1) && !isLoading) { isLoading = true; getGirlFromServer(); } } }); recyclerView.setAdapter(adapter); } @Override protected void lazyFetchData() { currentPage = 1; adapter.setNewData(null); getGirlFromServer(); } protected abstract void getGirlFromServer(); @Subscribe(threadMode = ThreadMode.MAIN) public void girlIsComing(GirlsComingEvent event) { if (!event.getFrom().equals(this.getClass().getName())) return; showRefreshing(false); if (adapter.getData() == null || adapter.getData().size() == 0) { adapter.setNewData(event.getGirls()); } else { adapter.addData(adapter.getData().size(), event.getGirls()); } receivedCount++; if (receivedCount == sendCount) { isLoading = false; } } @Override public void onStart() { super.onStart(); if (!EventBus.getDefault().isRegistered(this)) { EventBus.getDefault().register(this); } } @Override public void onDestroy() { if (EventBus.getDefault().isRegistered(this)) EventBus.getDefault().unregister(this); if (subscription != null && !subscription.isUnsubscribed()) subscription.unsubscribe(); super.onDestroy(); } }