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.itHome.ItHomeItem;
import name.caiyao.microreader.presenter.IItHomePresenter;
import name.caiyao.microreader.presenter.impl.ItHomePresenterImpl;
import name.caiyao.microreader.ui.adapter.ItAdapter;
import name.caiyao.microreader.ui.iView.IItHomeFragment;
import name.caiyao.microreader.ui.view.DividerItemDecoration;
import name.caiyao.microreader.utils.NetWorkUtil;
import name.caiyao.microreader.utils.SharePreferenceUtil;
/**
* Created by 蔡小木 on 2016/3/24 0024.
*/
public class ItHomeFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener, IItHomeFragment {
@BindView(R.id.progressBar)
ProgressBar progressBar;
@BindView(R.id.swipe_target)
RecyclerView swipeTarget;
@BindView(R.id.swipeToLoadLayout)
SwipeRefreshLayout swipeRefreshLayout;
private Unbinder mUnbinder;
private ArrayList<ItHomeItem> itHomeItems = new ArrayList<>();
private ItAdapter itAdapter;
private IItHomePresenter mItHomePresenter;
private String currentNewsId = "0";
private LinearLayoutManager mLinearLayoutManager;
private boolean loading = false;
private int pastVisiblesItems, visibleItemCount, totalItemCount;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable 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() {
swipeRefreshLayout.setOnRefreshListener(this);
mLinearLayoutManager = new LinearLayoutManager(getActivity());
setSwipeRefreshLayoutColor(swipeRefreshLayout);
swipeTarget.setLayoutManager(mLinearLayoutManager);
swipeTarget.setHasFixedSize(true);
swipeTarget.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL_LIST));
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();
}
}
}
});
itAdapter = new ItAdapter(getActivity(), itHomeItems);
swipeTarget.setAdapter(itAdapter);
mItHomePresenter.getNewsFromCache();
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() {
mItHomePresenter = new ItHomePresenterImpl(this, getActivity());
}
@Override
public void onDestroyView() {
super.onDestroyView();
mUnbinder.unbind();
mItHomePresenter.unsubcrible();
}
@Override
public void onRefresh() {
currentNewsId = "0";
itHomeItems.clear();
//2016-04-05修复Inconsistency detected. Invalid view holder adapter positionViewHolder
itAdapter.notifyDataSetChanged();
mItHomePresenter.getNewItHomeNews();
}
public void onLoadMore() {
mItHomePresenter.getMoreItHomeNews(currentNewsId);
}
@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) {
Snackbar.make(swipeRefreshLayout, getString(R.string.common_loading_error) + error, Snackbar.LENGTH_SHORT).setAction(getString(R.string.comon_retry), new View.OnClickListener() {
@Override
public void onClick(View v) {
if (currentNewsId.equals("0")) {
mItHomePresenter.getNewItHomeNews();
} else {
mItHomePresenter.getMoreItHomeNews(currentNewsId);
}
}
}).show();
}
@Override
public void updateList(ArrayList<ItHomeItem> itHomeItems) {
currentNewsId = itHomeItems.get(itHomeItems.size() - 1).getNewsid();
this.itHomeItems.addAll(itHomeItems);
itAdapter.notifyDataSetChanged();
}
}