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 android.widget.Toast; import java.util.ArrayList; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; import name.caiyao.microreader.R; import name.caiyao.microreader.bean.weixin.WeixinNews; import name.caiyao.microreader.presenter.IWeixinPresenter; import name.caiyao.microreader.presenter.impl.WeiXinPresenterImpl; import name.caiyao.microreader.ui.adapter.WeixinAdapter; import name.caiyao.microreader.ui.iView.IWeixinFragment; import name.caiyao.microreader.ui.view.DividerItemDecoration; import name.caiyao.microreader.utils.NetWorkUtil; import name.caiyao.microreader.utils.SharePreferenceUtil; public class WeixinFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener, IWeixinFragment { WeixinAdapter weixinAdapter; @BindView(R.id.swipe_target) RecyclerView swipeTarget; @BindView(R.id.swipeToLoadLayout) SwipeRefreshLayout swipeRefreshLayout; @BindView(R.id.progressBar) ProgressBar progressBar; private Unbinder mUnbinder; private IWeixinPresenter mWeixinPresenter; private ArrayList<WeixinNews> weixinNewses = new ArrayList<>(); private int currentPage = 1; private LinearLayoutManager mLinearLayoutManager; private boolean loading = false; private int pastVisiblesItems, visibleItemCount, totalItemCount; public WeixinFragment() { } @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 initView() { showProgressDialog(); swipeRefreshLayout.setOnRefreshListener(this); setSwipeRefreshLayoutColor(swipeRefreshLayout); mLinearLayoutManager = new LinearLayoutManager(getActivity()); swipeTarget.setLayoutManager(mLinearLayoutManager); swipeTarget.setHasFixedSize(true); swipeTarget.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL)); 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(); } } } }); weixinAdapter = new WeixinAdapter(getActivity(), weixinNewses); swipeTarget.setAdapter(weixinAdapter); mWeixinPresenter.getWeixinNews(1); if (SharePreferenceUtil.isRefreshOnlyWifi(getActivity())) { if (NetWorkUtil.isWifiConnected(getActivity())) { onRefresh(); } else { Toast.makeText(getActivity(), getString(R.string.toast_wifi_refresh_data), Toast.LENGTH_SHORT).show(); } } else { onRefresh(); } } private void initData() { mWeixinPresenter = new WeiXinPresenterImpl(this, getActivity()); } @Override public void onRefresh() { currentPage = 1; weixinNewses.clear(); //2016-04-05修复Inconsistency detected. Invalid view holder adapter positionViewHolder weixinAdapter.notifyDataSetChanged(); mWeixinPresenter.getWeixinNews(currentPage); } public void onLoadMore() { mWeixinPresenter.getWeixinNews(currentPage); } @Override public void showProgressDialog() { if (progressBar != null) progressBar.setVisibility(View.VISIBLE); } @Override public void onDestroyView() { super.onDestroyView(); mUnbinder.unbind(); mWeixinPresenter.unsubcrible(); } @Override public void hidProgressDialog() { if (swipeRefreshLayout != null) {//不加可能会崩溃 swipeRefreshLayout.setRefreshing(false); loading = false; } if (progressBar != null) progressBar.setVisibility(View.INVISIBLE); } @Override public void showError(String error) { if (swipeTarget != null) { mWeixinPresenter.getWeixinNewsFromCache(currentPage); Snackbar.make(swipeTarget, getString(R.string.common_loading_error) + error, Snackbar.LENGTH_INDEFINITE).setAction("重试", new View.OnClickListener() { @Override public void onClick(View v) { mWeixinPresenter.getWeixinNews(currentPage); } }).show(); } } @Override public void updateList(ArrayList<WeixinNews> weixinNewsesList) { currentPage++; weixinNewses.addAll(weixinNewsesList); weixinAdapter.notifyDataSetChanged(); } }