package name.caiyao.microreader.ui.fragment; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; import java.util.ArrayList; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; import name.caiyao.microreader.R; import name.caiyao.microreader.bean.zhihu.ZhihuDaily; import name.caiyao.microreader.bean.zhihu.ZhihuDailyItem; import name.caiyao.microreader.presenter.IZhihuPresenter; import name.caiyao.microreader.presenter.impl.ZhihuPresenterImpl; import name.caiyao.microreader.ui.adapter.ZhihuAdapter; import name.caiyao.microreader.ui.iView.IZhihuFragment; import name.caiyao.microreader.utils.NetWorkUtil; import name.caiyao.microreader.utils.SharePreferenceUtil; public class ZhihuFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener, IZhihuFragment { @BindView(R.id.swipe_target) RecyclerView swipeTarget; @BindView(R.id.swipeToLoadLayout) SwipeRefreshLayout swipeRefreshLayout; @BindView(R.id.progressBar) ProgressBar progressBar; private Unbinder mUnbinder; private String currentLoadedDate; private ZhihuAdapter zhihuAdapter; private IZhihuPresenter mZhihuPresenter; private ArrayList<ZhihuDailyItem> zhihuStories = new ArrayList<>(); private LinearLayoutManager mLinearLayoutManager; private boolean loading = false; private int pastVisiblesItems, visibleItemCount, totalItemCount; public ZhihuFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_common, container, false); mUnbinder = ButterKnife.bind(this, view); return view; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initData(); initView(); } private void initData() { mZhihuPresenter = new ZhihuPresenterImpl(this, getActivity()); } private void initView() { swipeRefreshLayout.setOnRefreshListener(this); setSwipeRefreshLayoutColor(swipeRefreshLayout); mLinearLayoutManager = new LinearLayoutManager(getActivity()); swipeTarget.setLayoutManager(mLinearLayoutManager); swipeTarget.setHasFixedSize(true); zhihuAdapter = new ZhihuAdapter(getActivity(), zhihuStories); swipeTarget.setAdapter(zhihuAdapter); swipeTarget.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (dy > 0) //向下滚动 { visibleItemCount = mLinearLayoutManager.getChildCount(); totalItemCount = mLinearLayoutManager.getItemCount(); pastVisiblesItems = mLinearLayoutManager.findFirstVisibleItemPosition(); if (!loading && (visibleItemCount + pastVisiblesItems) >= totalItemCount) { loading = true; onLoadMore(); } } } }); mZhihuPresenter.getLastFromCache(); if (SharePreferenceUtil.isRefreshOnlyWifi(getActivity())) { if (NetWorkUtil.isWifiConnected(getActivity())) { onRefresh(); } } else { onRefresh(); } } @Override public void onDestroyView() { super.onDestroyView(); mUnbinder.unbind(); mZhihuPresenter.unsubcrible(); } @Override public void onRefresh() { currentLoadedDate = "0"; zhihuStories.clear(); zhihuAdapter.notifyDataSetChanged(); mZhihuPresenter.getLastZhihuNews(); } private void onLoadMore() { mZhihuPresenter.getTheDaily(currentLoadedDate); } @Override public void showProgressDialog() { if (progressBar != null) progressBar.setVisibility(View.VISIBLE); } @Override public void hidProgressDialog() { if (progressBar != null) progressBar.setVisibility(View.INVISIBLE); if (swipeRefreshLayout != null) { swipeRefreshLayout.setRefreshing(false); loading = false; } } @Override public void showError(String error) { if (swipeTarget != null) { Snackbar.make(swipeTarget, getString(R.string.common_loading_error) + error, Snackbar.LENGTH_SHORT).setAction("重试", new View.OnClickListener() { @Override public void onClick(View v) { if (currentLoadedDate.equals("0")) { mZhihuPresenter.getLastZhihuNews(); } else { mZhihuPresenter.getTheDaily(currentLoadedDate); } } }).show(); } } @Override public void updateList(ZhihuDaily zhihuDaily) { currentLoadedDate = zhihuDaily.getDate(); zhihuStories.addAll(zhihuDaily.getStories()); zhihuAdapter.notifyDataSetChanged(); //若未填满屏幕 if (!swipeTarget.canScrollVertically(View.SCROLL_INDICATOR_BOTTOM)){ onLoadMore(); } } }