403 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			403 lines
		
	
	
		
			13 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();
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     @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) {
 | ||
| 
 | ||
|                 if (mData != null) {  //下拉刷新
 | ||
|                     mData = new ArrayList<Novel>();
 | ||
|                     mAdapter.setData(mData);
 | ||
|                   // loadListAd(mAdapter,1,false);
 | ||
| 
 | ||
|                 } else {
 | ||
| 
 | ||
|                   initialDataAdapter();
 | ||
|                 }
 | ||
|             }
 | ||
|      /*   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")); ;
 | ||
|                     mMoreData = GsonUtil. parserJsonArray(jsonObject,Constants.BLOCK_TITLE_NOVELS);
 | ||
|                     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")); ;
 | ||
|                         mMoreData =    GsonUtil. parserJsonArray(resultstr,Constants.BLOCK_TITLE_NOVELS);
 | ||
|                         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);
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| }
 |