437 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			437 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | 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<Integer>(); | |||
|  |             if (mData != null) {  //下拉刷新 | |||
|  |                 mData = new ArrayList<Novel>(); | |||
|  |                 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<Novel> list = GsonUtil.parserJsonArray(jsonObject, Constants.BLOCK_TITLE_NOVELS); | |||
|  |                     mMoreData = new ArrayList<Novel>(); | |||
|  |                     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<Novel> list = GsonUtil.parserJsonArray(resultstr, Constants.BLOCK_TITLE_NOVELS); | |||
|  |                         mMoreData = new ArrayList<Novel>(); | |||
|  |                         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<Novel>(); | |||
|  |         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); | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  | } |