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.weiboVideo.WeiboVideoBlog; import name.caiyao.microreader.presenter.IVideoPresenter; import name.caiyao.microreader.presenter.impl.VideoPresenterImpl; import name.caiyao.microreader.ui.adapter.VideoAdapter; import name.caiyao.microreader.ui.iView.IVideoFragment; import name.caiyao.microreader.utils.NetWorkUtil; import name.caiyao.microreader.utils.SharePreferenceUtil; public class VideoFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener, IVideoFragment { @BindView(R.id.progressBar) ProgressBar progressBar; @BindView(R.id.swipe_target) RecyclerView swipeTarget; @BindView(R.id.swipeToLoadLayout) SwipeRefreshLayout swipeRefreshLayout; private LinearLayoutManager mLinearLayoutManager; private boolean loading = false; int pastVisiblesItems, visibleItemCount, totalItemCount; private Unbinder mUnbinder; private ArrayList<WeiboVideoBlog> mWeiboVideoBlogs = new ArrayList<>(); private int currentPage = 1; private IVideoPresenter mIVideoPresenter; private VideoAdapter videoAdapter; public VideoFragment() { } @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() { mIVideoPresenter = new VideoPresenterImpl(this, getActivity()); } private void initView() { swipeRefreshLayout.setOnRefreshListener(this); setSwipeRefreshLayoutColor(swipeRefreshLayout); mLinearLayoutManager = new LinearLayoutManager(getActivity()); swipeTarget.setLayoutManager(mLinearLayoutManager); swipeTarget.setHasFixedSize(true); 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(); } } } }); videoAdapter = new VideoAdapter(getActivity(), mWeiboVideoBlogs); swipeTarget.setAdapter(videoAdapter); mIVideoPresenter.getVideoFromCache(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(); } } @Override public void onDestroyView() { super.onDestroyView(); mUnbinder.unbind(); mIVideoPresenter.unsubcrible(); } @Override public void onRefresh() { currentPage = 1; mWeiboVideoBlogs.clear(); videoAdapter.notifyDataSetChanged(); mIVideoPresenter.getVideo(currentPage); } public void onLoadMore() { mIVideoPresenter.getVideo(currentPage); } @Override public void showProgressDialog() { if (progressBar != null) progressBar.setVisibility(View.VISIBLE); } @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) { mIVideoPresenter.getVideoFromCache(currentPage); Snackbar.make(swipeTarget, getString(R.string.common_loading_error) + error, Snackbar.LENGTH_SHORT).setAction("重试", new View.OnClickListener() { @Override public void onClick(View v) { mIVideoPresenter.getVideo(currentPage); } }).show(); } } @Override public void updateList(ArrayList<WeiboVideoBlog> weiboVideoBlogs) { currentPage++; mWeiboVideoBlogs.addAll(weiboVideoBlogs); videoAdapter.notifyDataSetChanged(); } }