package com.novelbook.android.Fragments; import android.annotation.SuppressLint; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.Toast; import com.novelbook.android.R; import com.novelbook.android.db.Novel; import com.novelbook.android.netsubscribe.BookSubscribe; import com.novelbook.android.netutils.OnSuccessAndFaultListener; import com.novelbook.android.netutils.OnSuccessAndFaultSub; import com.novelbook.android.utils.Constants; import com.novelbook.android.utils.GsonUtil; import com.novelbook.android.utils.OnItemClickListener; import com.novelbook.android.adapter.BookListAdapter; import com.umeng.analytics.MobclickAgent; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; import butterknife.BindView; public class Fragment_booklist extends BasicFragment { public static final String TAG = Fragment_booklist.class.getSimpleName(); private static final String EXTR_CATE = "cate"; private static final String EXTR_PROGRESS = "progress"; private static final String EXTR_SEARCH = "search"; private static final String EXTR_FN = "fn"; private static final String EXTR_BANGDAN = "bangdan"; private static final String EXTR_HISTORY = "history"; private static final String EXTR_CID = "cid"; private BookListAdapter mAdapter; // private BookListAdapter mAdapter; private List mData; ; private List mMoreData; private String cate; private int progress, cid; private String keyWord, fn, bangdan, history; private int listItem = R.layout.recycle_list_item_horizon; //private int pageNo=1; private int totalCount; // private int pageCount; @BindView(R.id.rvBooklist) RecyclerView mRecyclerView; @SuppressLint("ValidFragment") public Fragment_booklist(String cate, int progress) { this.cate = cate; this.progress = progress; } public Fragment_booklist() { // Required empty public constructor } public static Fragment_booklist newInstance(int cid, String bangdan) { Fragment_booklist fragment = new Fragment_booklist(); Bundle args = new Bundle(); args.putInt(EXTR_CID, cid); args.putString(EXTR_BANGDAN, bangdan); fragment.setArguments(args); return fragment; } public static Fragment_booklist newInstance(String fn, String bangdan) { Fragment_booklist fragment = new Fragment_booklist(); Bundle args = new Bundle(); args.putString(EXTR_FN, fn); args.putString(EXTR_BANGDAN, bangdan); fragment.setArguments(args); return fragment; } public static Fragment_booklist newInstance(String noveType, int progress) { Fragment_booklist fragment = new Fragment_booklist(); Bundle args = new Bundle(); args.putString(EXTR_CATE, noveType); args.putInt(EXTR_PROGRESS, progress); fragment.setArguments(args); return fragment; } public static Fragment_booklist search(String keyWord) { Fragment_booklist fragment = new Fragment_booklist(); Bundle args = new Bundle(); args.putString(EXTR_SEARCH, keyWord); fragment.setArguments(args); return fragment; } public static Fragment_booklist history() { Fragment_booklist fragment = new Fragment_booklist(); Bundle args = new Bundle(); args.putString(EXTR_HISTORY, EXTR_HISTORY); fragment.setArguments(args); return fragment; } protected void processArguments() { if (getArguments() != null) { Bundle bundle = getArguments(); bangdan = bundle.getString(EXTR_BANGDAN); fn = bundle.getString(EXTR_FN); cid = bundle.getInt(EXTR_CID); if (!TextUtils.isEmpty((fn))) { return; } cate = bundle.getString(EXTR_CATE); progress = bundle.getInt(EXTR_PROGRESS); keyWord = bundle.getString(EXTR_SEARCH); history = bundle.getString(EXTR_HISTORY); if (!TextUtils.isEmpty(history)) { listItem = R.layout.recycle_list_item_history; } } } int lastPageNo = 0; @Override protected void fillData() { if (mRecyclerView.getAdapter() == null) { mRecyclerView.setLayoutManager(new LinearLayoutManager(activity)); mRecyclerView.setAdapter(mAdapter); } if (mMoreData != null) { if (mMoreData.size() > 0) { pageNo++; } int status = getPageCount() >= pageNo ? BookListAdapter.PULLUP_LOAD_MORE : BookListAdapter.NO_LOAD_MORE; // mAdapter.setPercent(pageNo/pageCount); mAdapter.AddFooterItem(mMoreData); mAdapter.changeMoreStatus(status); mMoreData.clear(); } mAdapter.setNorecord(R.string.noRecord); } @Override protected int getLayoutRes() { return R.layout.fragment_fragment_booklist; } @Override public void initData() { if (pageNo > 1) { if (lastPageNo == pageNo) { return; } } lastPageNo = pageNo; // int pn = pageNo; if (pageNo == 1) { noveIds = new ArrayList(); if (mData != null) { //下拉刷新 mData = new ArrayList(); mAdapter.setData(mData); // loadListAd(mAdapter,1,false); } else { initialDataAdapter(); } } if (mAdapter != null) { mAdapter.setNorecord(R.string.msgLoading); } /* if(mAdapter!=null){ mAdapter.changeMoreStatus(BookListAdapter.LOADING_MORE); }*/ mMoreData = null; OnSuccessAndFaultListener successAndFaultListener = new OnSuccessAndFaultListener() { @Override public void onSuccess(String result) { // mFirstPage= gson.fromJson(result, FirstPage.class); try { JSONObject jsonObject = new JSONObject(result); setPageCount(jsonObject.getInt("pageCount")); ; List list = GsonUtil.parserJsonArray(jsonObject, Constants.BLOCK_TITLE_NOVELS); mMoreData = new ArrayList(); for (Novel novel : list) { if (!noveIds.contains(novel.getNovelId())) { mMoreData.add(novel); noveIds.add(novel.getNovelId()); } } if (mMoreData.size() > 0) { loadListAd(mAdapter, 1, mData.size() > 0); } } catch (Exception e) { e.printStackTrace(); Log.e(TAG, "onSuccess: 解析失败", e); } handler.sendEmptyMessage(1); } @Override public void onFault(String errorMsg) { //失败 Log.d(TAG, "error on get firstpage: " + errorMsg); handler.sendEmptyMessage(1); } }; showProgressDialog(false, "正在加载..."); Log.d(TAG, String.format("fn is %s", fn)); if (!TextUtils.isEmpty(bangdan) && (cid > 0 || !TextUtils.isEmpty(fn))) { //榜单 // showProgressDialog(true, "正在加载榜单"); mAdapter.setShowTop(true); BookSubscribe.getPaihangBangList(Constants.SEX, pageNo, cid, new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() { @Override public void onSuccess(String result) { try { JSONObject jsonObject = new JSONObject(result); String resultstr = jsonObject.getString("rank"); setPageCount(jsonObject.getJSONObject("rank").getInt("pageCount")); ; List list = GsonUtil.parserJsonArray(resultstr, Constants.BLOCK_TITLE_NOVELS); mMoreData = new ArrayList(); for (Novel novel : list) { if (!noveIds.contains(novel.getNovelId())) { mMoreData.add(novel); noveIds.add(novel.getNovelId()); } } Log.d(TAG, "排行榜详细 onSuccess: pageCount " + getPageCount()); if (mMoreData.size() > 0) { loadListAd(mAdapter, 1, mData.size() > 0); } } catch (Exception e) { e.printStackTrace(); Log.e(TAG, "onSuccess: 解析失败", e); } Log.d(TAG, "progress: progress to hide"); handler.sendEmptyMessage(1); } @Override public void onFault(String errorMsg) { //失败 Log.d(TAG, "error on get firstpage: " + errorMsg); handler.sendEmptyMessage(1); } }, getActivity())); } else if (!TextUtils.isEmpty(fn)) { //首页 更多 mAdapter.setShowTop(true); // showProgressDialog(true, "正在加载更多"); BookSubscribe.getNovelPaihang(fn, pageNo, Constants.SEX, new OnSuccessAndFaultSub(successAndFaultListener, getActivity())); } else if (!TextUtils.isEmpty((cate))) { //分类 mAdapter.setShowTop(true); // showProgressDialog(true, "正在加载分类"); BookSubscribe.getCateNovelList(cate, pageNo, Constants.SEX, progress, new OnSuccessAndFaultSub(successAndFaultListener, getActivity())); } else if (!TextUtils.isEmpty(keyWord)) { //搜索 // showProgressDialog(true, "正在加载搜索"); // mAdapter.setShowTop(true); BookSubscribe.getSearchNovelList(keyWord, pageNo, Constants.SEX, new OnSuccessAndFaultSub(successAndFaultListener, getActivity())); } else if (!TextUtils.isEmpty(history)) { loadHistory(); } else { handler.sendEmptyMessage(1); } } private void initialDataAdapter() { mData = new ArrayList(); mAdapter = new BookListAdapter(activity, mData, listItem, new OnItemClickListener() { @Override public void onItemClick(View view, int position) { if (mData.get(position) instanceof Novel) showBookDetail((Novel) mData.get(position)); // openBook(mData.get(position),mAdapter); } @Override public void onItemLongClick(View view, int position) { // initDialog(position); // mAdapter.removeData(position); } @Override public void onLinearOutClick(View view, int position, int llId) { Toast.makeText(activity, "book " + position + " clicked", Toast.LENGTH_SHORT).show(); } }); mAdapter.setShowFootView(true); mRecyclerView.setLayoutManager(new LinearLayoutManager(activity)); mRecyclerView.setAdapter(mAdapter); } @Override public void initViews() { //mRecyclerView //lv_catalogue.setFastScrollStyle(R.style.FastScrollTheme); //不起作用 initLoadMoreListener(); } //----------------绑定列表 void initialBookList() { } @Override public void setFTag() { } private void initLoadMoreListener() { mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { int lastVisibleItem; @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); Log.d(TAG, String.format("onScrollStateChanged , state %s ,lastVisibleitem %s ,getItemCount %s,pageno %s ,getPageCount() %s", newState == RecyclerView.SCROLL_STATE_IDLE, lastVisibleItem, mAdapter.getItemCount(), pageNo, getPageCount())); //判断RecyclerView的状态 是空闲时,同时,是最后一个可见的ITEM时才加载 if (newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 == mAdapter.getItemCount()) { if (pageNo <= getPageCount()) { //设置正在加载更多 mAdapter.changeMoreStatus(mAdapter.LOADING_MORE); //改为网络请求 initData(); } else { mAdapter.changeMoreStatus(mAdapter.NO_LOAD_MORE); } } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); //最后一个可见的ITEM lastVisibleItem = layoutManager.findLastVisibleItemPosition(); } }); } void loadHistory() { initialDataAdapter(); new Thread() { @Override public void run() { super.run(); mMoreData = Novel.getNovelsHistory(); setPageCount(1); // handler.sendEmptyMessage(1); if (mMoreData != null && mMoreData.size() > 5) { loadListAd(mAdapter, 1, mData.size() > 0); } } }.start(); } boolean isFirstLoad = true; @Override public void onResume() { super.onResume(); // pageNo=1; if (!TextUtils.isEmpty(history)) { if (isFirstLoad) { isFirstLoad = false; } else { initData(); } } MobclickAgent.onPageStart(TAG); } @Override public void onPause() { super.onPause(); MobclickAgent.onPageEnd(TAG); } }