package com.codeest.geeknews.ui.zhihu.fragment; import android.app.ActivityOptions; import android.content.Intent; import android.support.design.widget.FloatingActionButton; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import com.codeest.geeknews.R; import com.codeest.geeknews.app.Constants; import com.codeest.geeknews.base.RootFragment; import com.codeest.geeknews.base.contract.zhihu.DailyContract; import com.codeest.geeknews.component.RxBus; import com.codeest.geeknews.model.bean.DailyBeforeListBean; import com.codeest.geeknews.model.bean.DailyListBean; import com.codeest.geeknews.presenter.zhihu.DailyPresenter; import com.codeest.geeknews.ui.zhihu.activity.CalendarActivity; import com.codeest.geeknews.ui.zhihu.activity.ZhihuDetailActivity; import com.codeest.geeknews.ui.zhihu.adapter.DailyAdapter; import com.codeest.geeknews.util.CircularAnimUtil; import com.codeest.geeknews.util.DateUtil; import com.prolificinteractive.materialcalendarview.CalendarDay; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.OnClick; /** * Created by codeest on 2016/8/11. */ public class DailyFragment extends RootFragment<DailyPresenter> implements DailyContract.View { @BindView(R.id.fab_calender) FloatingActionButton fabCalender; @BindView(R.id.swipe_refresh) SwipeRefreshLayout swipeRefresh; @BindView(R.id.view_main) RecyclerView rvDailyList; String currentDate; DailyAdapter mAdapter; List<DailyListBean.StoriesBean> mList = new ArrayList<>(); boolean isDataReady = false; @Override protected void initInject() { getFragmentComponent().inject(this); } @Override protected int getLayoutId() { return R.layout.fragment_daily; } @Override protected void initEventAndData() { super.initEventAndData(); currentDate = DateUtil.getTomorrowDate(); mAdapter = new DailyAdapter(mContext,mList); mAdapter.setOnItemClickListener(new DailyAdapter.OnItemClickListener() { @Override public void onItemClick(int position,View shareView) { mPresenter.insertReadToDB(mList.get(position).getId()); mAdapter.setReadState(position,true); if(mAdapter.getIsBefore()) { mAdapter.notifyItemChanged(position + 1); } else { mAdapter.notifyItemChanged(position + 2); } Intent intent = new Intent(); intent.setClass(mContext, ZhihuDetailActivity.class); intent.putExtra(Constants.IT_ZHIHU_DETAIL_ID, mList.get(position).getId()); ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(mActivity, shareView, "shareView"); mContext.startActivity(intent,options.toBundle()); } }); swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { if(currentDate.equals(DateUtil.getTomorrowDate())) { mPresenter.getDailyData(); } else { int year = Integer.valueOf(currentDate.substring(0,4)); int month = Integer.valueOf(currentDate.substring(4,6)); int day = Integer.valueOf(currentDate.substring(6,8)); CalendarDay date = CalendarDay.from(year, month - 1, day); RxBus.getDefault().post(date); } } }); rvDailyList.setLayoutManager(new LinearLayoutManager(mContext)); rvDailyList.setAdapter(mAdapter); stateLoading(); mPresenter.getDailyData(); } @Override public void onStart() { super.onStart(); if (isDataReady) { mPresenter.startInterval(); } } @Override public void onStop() { super.onStop(); mPresenter.stopInterval(); } /** * 当天数据 * @param info */ @Override public void showContent(DailyListBean info) { if(swipeRefresh.isRefreshing()) { swipeRefresh.setRefreshing(false); } stateMain(); mList = info.getStories(); currentDate = String.valueOf(Integer.valueOf(info.getDate()) + 1); mAdapter.addDailyDate(info); isDataReady = true; mPresenter.startInterval(); } /** * 过往数据 * @param date * @param info */ @Override public void showMoreContent(String date,DailyBeforeListBean info) { if(swipeRefresh.isRefreshing()) { swipeRefresh.setRefreshing(false); } stateMain(); isDataReady = false; mPresenter.stopInterval(); mList = info.getStories(); currentDate = String.valueOf(Integer.valueOf(info.getDate())); mAdapter.addDailyBeforeDate(info); } @Override public void doInterval(int currentCount) { mAdapter.changeTopPager(currentCount); } @OnClick(R.id.fab_calender) void startCalender() { Intent it = new Intent(); it.setClass(mContext,CalendarActivity.class); CircularAnimUtil.startActivity(mActivity,it,fabCalender,R.color.fab_bg); } @Override public void stateError() { super.stateError(); if(swipeRefresh.isRefreshing()) { swipeRefresh.setRefreshing(false); } } }