package com.yuyh.sprintnba.ui.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.text.TextUtils;
import android.view.View;
import com.cjj.MaterialRefreshLayout;
import com.cjj.MaterialRefreshListener;
import com.yuyh.library.utils.DimenUtils;
import com.yuyh.library.utils.log.LogUtils;
import com.yuyh.library.utils.toast.ToastUtils;
import com.yuyh.sprintnba.R;
import com.yuyh.sprintnba.app.Constant;
import com.yuyh.sprintnba.base.BaseLazyFragment;
import com.yuyh.sprintnba.base.BaseWebActivity;
import com.yuyh.sprintnba.http.api.RequestCallback;
import com.yuyh.sprintnba.http.api.tencent.TencentService;
import com.yuyh.sprintnba.http.bean.news.NewsIndex;
import com.yuyh.sprintnba.http.bean.news.NewsItem;
import com.yuyh.sprintnba.support.OnListItemClickListener;
import com.yuyh.sprintnba.support.SpaceItemDecoration;
import com.yuyh.sprintnba.support.SupportRecyclerView;
import com.yuyh.sprintnba.ui.NewsDetailActivity;
import com.yuyh.sprintnba.ui.adapter.NewsAdapter;
import java.util.ArrayList;
import java.util.List;
import butterknife.InjectView;
public class NewsListFragment extends BaseLazyFragment {
public static final String INTENT_INT_INDEX = "intent_int_index";
@InjectView(R.id.refresh)
MaterialRefreshLayout materialRefreshLayout;
@InjectView(R.id.recyclerview)
SupportRecyclerView recyclerView;
@InjectView(R.id.emptyView)
View emptyView;
private NewsAdapter adapter;
private List<NewsItem.NewsItemBean> list = new ArrayList<>();
private List<String> indexs = new ArrayList<>();
private int start = 0; // 查询数据起始位置
private int num = 10;
Constant.NewsType newsType = Constant.NewsType.BANNER;
@Override
protected void onCreateViewLazy(Bundle savedInstanceState) {
super.onCreateViewLazy(savedInstanceState);
setContentView(R.layout.fragment_normal_recyclerview);
showLoadingDialog();
newsType = (Constant.NewsType) getArguments().getSerializable(INTENT_INT_INDEX);
initView();
requestIndex(false);
}
private void initView() {
adapter = new NewsAdapter(list, mActivity);
adapter.setOnItemClickListener(new OnListItemClickListener<NewsItem.NewsItemBean>() {
@Override
public void onItemClick(View view, int position, NewsItem.NewsItemBean data) {
Intent intent;
switch (newsType) {
case VIDEO:
case DEPTH:
case HIGHLIGHT:
BaseWebActivity.start(mActivity, data.url, data.title, true, true);
break;
case BANNER:
case NEWS:
default:
NewsDetailActivity.start(mActivity, data.title, data.index);
break;
}
}
});
recyclerView.setLayoutManager(new LinearLayoutManager(recyclerView.getContext()));
recyclerView.setAdapter(adapter);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.addItemDecoration(new SpaceItemDecoration(DimenUtils.dpToPxInt(5)));
materialRefreshLayout.setMaterialRefreshListener(new RefreshListener());
}
private void requestIndex(final boolean isRefresh) {
TencentService.getNewsIndex(newsType, isRefresh, new RequestCallback<NewsIndex>() {
@Override
public void onSuccess(NewsIndex newsIndex) {
indexs.clear();
start = 0;
for (NewsIndex.IndexBean bean : newsIndex.data) {
indexs.add(bean.id);
}
String arcIds = parseIds();
requestNews(arcIds, isRefresh, false);
}
@Override
public void onFailure(String message) {
complete();
LogUtils.i(message);
}
});
}
private void requestNews(String arcIds, final boolean isRefresh, final boolean isLoadMore) {
TencentService.getNewsItem(newsType, arcIds, isRefresh, new RequestCallback<NewsItem>() {
@Override
public void onSuccess(NewsItem newsItem) {
if (isRefresh)
list.clear();
list.addAll(newsItem.data);
complete();
}
@Override
public void onFailure(String message) {
complete();
}
});
}
private String parseIds() {
int size = indexs.size();
String articleIds = "";
for (int i = start, j = 0; i < size && j < num; i++, j++, start++) {
articleIds += indexs.get(i) + ",";
}
if (!TextUtils.isEmpty(articleIds))
articleIds = articleIds.substring(0, articleIds.length() - 1);
LogUtils.i("articleIds = " + articleIds);
return articleIds;
}
private class RefreshListener extends MaterialRefreshListener {
@Override
public void onRefresh(final MaterialRefreshLayout materialRefreshLayout) {
requestIndex(true);
}
@Override
public void onRefreshLoadMore(final MaterialRefreshLayout materialRefreshLayout) {
LogUtils.i("load more: start=" + start);
String arcIds = parseIds();
if (!TextUtils.isEmpty(arcIds)) {
requestNews(arcIds, false, true);
} else {
ToastUtils.showToast("已经到底啦");
complete();
}
}
}
private void complete() {
recyclerView.setEmptyView(emptyView);
adapter.notifyDataSetChanged();
materialRefreshLayout.finishRefresh();
materialRefreshLayout.finishRefreshLoadMore();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
hideLoadingDialog();
}
}, 1000);
}
@Override
protected void onPauseLazy() {
super.onPauseLazy();
}
@Override
public void onDestroyViewLazy() {
super.onDestroyViewLazy();
}
}