package com.lzy.ninegridview.model.news;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
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 com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.lzy.ninegridview.R;
import com.lzy.ninegridview.callback.NewsCallBack;
import com.lzy.ninegridview.model.news.bean.NewsContent;
import com.lzy.ninegridview.utils.Urls;
import com.lzy.okhttputils.OkHttpUtils;
import com.lzy.okhttputils.cache.CacheMode;
import com.lzy.okhttputils.model.HttpParams;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import in.srain.cube.views.ptr.PtrClassicFrameLayout;
import in.srain.cube.views.ptr.PtrDefaultHandler;
import in.srain.cube.views.ptr.PtrFrameLayout;
import okhttp3.Request;
import okhttp3.Response;
/**
* ================================================
* 作 者:廖子尧
* 版 本:1.0
* 创建日期:2016/3/20
* 描 述:
* 修订历史:
* ================================================
*/
public class NewsFragment extends Fragment {
@Bind(R.id.ptr) PtrClassicFrameLayout ptr;
@Bind(R.id.recyclerView) RecyclerView recyclerView;
private List<NewsContent> newsContentList;
private NewsContentAdapter mAdapter;
private String channelId;
private int page;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_news, container, false);
ButterKnife.bind(this, view);
Bundle bundle = getArguments();
channelId = bundle.getString("channelId");
page = bundle.getInt("page");
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mAdapter = new NewsContentAdapter(getActivity(), new ArrayList<NewsContent>());
recyclerView.setAdapter(mAdapter);
initData(false);
ptr.setLastUpdateTimeRelateObject(this);
ptr.setPtrHandler(new PtrDefaultHandler() {
@Override
public void onRefreshBegin(PtrFrameLayout frame) {
initData(true);
}
});
return view;
}
private void initData(final boolean isMore) {
HttpParams params = new HttpParams();
params.put("channelId", channelId);
params.put("page", String.valueOf(page));
OkHttpUtils.get(Urls.NEWS)//
.tag(this)//
.params(params)//
.cacheKey("NEWS")//
.cacheMode(CacheMode.FIRST_CACHE_THEN_REQUEST)//
.execute(new NewsCallBack() {
@Override
public void onResponse(boolean isFromCache, String s, Request request, @Nullable Response response) {
try {
JSONArray object = new JSONObject(s).getJSONObject("showapi_res_body").getJSONObject("pagebean").getJSONArray("contentlist");
Type newsContentType = new TypeToken<List<NewsContent>>() {}.getType();
if (isMore) {
List<NewsContent> more = new Gson().fromJson(object.toString(), newsContentType);
newsContentList.addAll(0, more);
} else {
newsContentList = new Gson().fromJson(object.toString(), newsContentType);
}
mAdapter.setData(newsContentList);
page++;
ptr.refreshComplete();
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
}