package com.example.jingbin.cloudreader.ui.one;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.view.View;
import android.widget.ImageView;
import com.example.jingbin.cloudreader.MainActivity;
import com.example.jingbin.cloudreader.R;
import com.example.jingbin.cloudreader.adapter.OneAdapter;
import com.example.jingbin.cloudreader.app.Constants;
import com.example.jingbin.cloudreader.app.ConstantsImageUrl;
import com.example.jingbin.cloudreader.base.BaseFragment;
import com.example.jingbin.cloudreader.bean.HotMovieBean;
import com.example.jingbin.cloudreader.databinding.FragmentOneBinding;
import com.example.jingbin.cloudreader.http.HttpClient;
import com.example.jingbin.cloudreader.http.cache.ACache;
import com.example.jingbin.cloudreader.utils.DebugUtil;
import com.example.jingbin.cloudreader.utils.ImgLoadUtil;
import com.example.jingbin.cloudreader.utils.PerfectClickListener;
import com.example.jingbin.cloudreader.utils.SPUtils;
import com.example.jingbin.cloudreader.utils.TimeUtil;
import rx.Observer;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
public class OneFragment extends BaseFragment<FragmentOneBinding> {
// 初始化完成后加载数据
private boolean isPrepared = false;
// 第一次显示时加载数据,第二次不显示
private boolean isFirst = true;
// 是否正在刷新(用于刷新数据时返回页面不再刷新)
private boolean mIsLoading = false;
private ACache aCache;
private MainActivity activity;
private HotMovieBean mHotMovieBean;
private View mHeaderView = null;
private OneAdapter oneAdapter;
@Override
public int setContent() {
return R.layout.fragment_one;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
activity = (MainActivity) context;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
showContentView();
aCache = ACache.get(getActivity());
oneAdapter = new OneAdapter(activity);
mHotMovieBean = (HotMovieBean) aCache.getAsObject(Constants.ONE_HOT_MOVIE);
isPrepared = true;
DebugUtil.error("---OneFragment --onActivityCreated");
}
/**
* 懒加载
* 从此页面新开activity界面返回此页面 不会走这里
*/
@Override
protected void loadData() {
DebugUtil.error("------OneFragment---loadData: ");
if (!isPrepared || !mIsVisible) {
return;
}
// 显示,准备完毕,不是当天,则请求数据(正在请求时避免再次请求)
String oneData = SPUtils.getString("one_data", "2016-11-26");
if (!oneData.equals(TimeUtil.getData()) && !mIsLoading) {
showLoading();
/**延迟执行防止卡顿*/
postDelayLoad();
} else {
// 为了正在刷新时不执行这部分
if (mIsLoading) {
return;
}
if (!isFirst) {
return;
}
showLoading();
if (mHotMovieBean == null && !mIsLoading) {
postDelayLoad();
} else {
bindingView.listOne.postDelayed(new Runnable() {
@Override
public void run() {
synchronized (this) {
setAdapter(mHotMovieBean);
showContentView();
}
}
}, 150);
DebugUtil.error("----缓存: " + oneData);
}
}
}
private void loadHotMovie() {
Subscription subscription = HttpClient.Builder.getDouBanService().getHotMovie().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<HotMovieBean>() {
@Override
public void onCompleted() {
showContentView();
}
@Override
public void onError(Throwable e) {
showContentView();
if (oneAdapter != null && oneAdapter.getItemCount() == 0) {
showError();
}
}
@Override
public void onNext(HotMovieBean hotMovieBean) {
if (hotMovieBean != null) {
aCache.remove(Constants.ONE_HOT_MOVIE);
// 保存12个小时
aCache.put(Constants.ONE_HOT_MOVIE, hotMovieBean, 43200);
setAdapter(hotMovieBean);
// 保存请求的日期
SPUtils.putString("one_data", TimeUtil.getData());
// 刷新结束
mIsLoading = false;
}
//构造器中,第一个参数表示列数或者行数,第二个参数表示滑动方向,瀑布流
// bindingContentView.listOne.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));
// GridView
// bindingContentView.listOne.setLayoutManager(new GridLayoutManager(getActivity(), 2));
}
});
addSubscription(subscription);
}
private void setAdapter(HotMovieBean hotMovieBean) {
LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
bindingView.listOne.setLayoutManager(mLayoutManager);
// 加上这两行代码,下拉出提示才不会产生出现刷新头的bug,不加拉不下来
bindingView.listOne.setPullRefreshEnabled(false);
bindingView.listOne.clearHeader();
bindingView.listOne.setLoadingMoreEnabled(false);
// 需加,不然滑动不流畅
bindingView.listOne.setNestedScrollingEnabled(false);
bindingView.listOne.setHasFixedSize(false);
if (mHeaderView == null) {
mHeaderView = View.inflate(getContext(), R.layout.header_item_one, null);
View llMovieTop = mHeaderView.findViewById(R.id.ll_movie_top);
ImageView ivImg = (ImageView) mHeaderView.findViewById(R.id.iv_img);
ImgLoadUtil.displayRandom(3, ConstantsImageUrl.ONE_URL_01,ivImg);
llMovieTop.setOnClickListener(new PerfectClickListener() {
@Override
protected void onNoDoubleClick(View v) {
DoubanTopActivity.start(v.getContext());
}
});
}
bindingView.listOne.addHeaderView(mHeaderView);
oneAdapter.clear();
oneAdapter.addAll(hotMovieBean.getSubjects());
bindingView.listOne.setAdapter(oneAdapter);
oneAdapter.notifyDataSetChanged();
isFirst = false;
}
/**
* 延迟执行,避免卡顿
* 加同步锁,避免重复加载
*/
private void postDelayLoad() {
synchronized (this) {
if (!mIsLoading) {
mIsLoading = true;
bindingView.listOne.postDelayed(new Runnable() {
@Override
public void run() {
loadHotMovie();
}
}, 150);
}
}
}
@Override
protected void onRefresh() {
loadHotMovie();
}
@Override
public void onDestroy() {
super.onDestroy();
DebugUtil.error("--OneFragment ----onDestroy");
}
/**
* 从此页面新开activity界面返回此页面 走这里
*/
@Override
public void onResume() {
super.onResume();
DebugUtil.error("--OneFragment ----onResume");
}
}