430 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			430 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| package com.novelbook.android.Fragments;
 | ||
| 
 | ||
| import android.content.Context;
 | ||
| import android.os.Bundle;
 | ||
| import android.os.Handler;
 | ||
| import android.os.Message;
 | ||
| import android.support.design.widget.AppBarLayout;
 | ||
| import android.support.v4.widget.NestedScrollView;
 | ||
| import android.support.v7.widget.LinearLayoutManager;
 | ||
| import android.support.v7.widget.RecyclerView;
 | ||
| import android.util.Log;
 | ||
| import android.view.View;
 | ||
| import android.widget.TextView;
 | ||
| 
 | ||
| import com.ixiaow.multilayout.MultiLayout;
 | ||
| import com.novelbook.android.R;
 | ||
| 
 | ||
| 
 | ||
| import com.novelbook.android.bean.ProgressType;
 | ||
| import com.novelbook.android.db.Novel;
 | ||
| import com.novelbook.android.netapi.RandomHost;
 | ||
| import com.novelbook.android.netsubscribe.BookSubscribe;
 | ||
| import com.novelbook.android.netutils.NetUtil;
 | ||
| import com.novelbook.android.netutils.OnSuccessAndFaultListener;
 | ||
| import com.novelbook.android.netutils.OnSuccessAndFaultSub;
 | ||
| import com.novelbook.android.utils.CommonUtil;
 | ||
| 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.flyco.tablayout.CommonTabLayout;
 | ||
| import com.flyco.tablayout.listener.CustomTabEntity;
 | ||
| import com.umeng.analytics.MobclickAgent;
 | ||
| 
 | ||
| import org.json.JSONArray;
 | ||
| import org.json.JSONObject;
 | ||
| import org.litepal.util.Const;
 | ||
| 
 | ||
| import java.util.ArrayList;
 | ||
| import java.util.Arrays;
 | ||
| import java.util.List;
 | ||
| 
 | ||
| import butterknife.BindView;
 | ||
| 
 | ||
| import static com.novelbook.android.utils.Constants.lstNt;
 | ||
| import static com.novelbook.android.utils.Constants.lstProgress;
 | ||
| import static com.novelbook.android.utils.Constants.lstSex;
 | ||
| 
 | ||
| public class Fragment_paihang extends BasicFragment {
 | ||
| public static final String TAG = Fragment_paihang.class.getSimpleName();
 | ||
| 
 | ||
| 
 | ||
|     private ArrayList<CustomTabEntity> mData1,mData2,mData3  ;
 | ||
|     private int tab1Pos,tab2Pos,tab3Pos;
 | ||
|     private BookListAdapter mAdapter;
 | ||
|     // private BookListAdapter mAdapter;
 | ||
|     private List<Novel> mData;;
 | ||
|     private List<Novel> mMoreData;
 | ||
|     @BindView(R.id.rvPaihang)
 | ||
|     RecyclerView rvPaihang;
 | ||
|   /*  @BindView(R.id.tab_layout1)
 | ||
|     CommonTabLayout tabLayout1;
 | ||
|     @BindView(R.id.tab_layout2)
 | ||
|     CommonTabLayout tabLayout2;
 | ||
|     @BindView(R.id.tab_layout3)*/
 | ||
|     CommonTabLayout tabLayout3;
 | ||
|     @BindView(R.id.topic_layout)
 | ||
|     MultiLayout topic_layout;
 | ||
|     @BindView(R.id.topic_layout1)
 | ||
|     MultiLayout topic_layout1;
 | ||
|     @BindView(R.id.topic_layout2)
 | ||
|     MultiLayout topic_layout2;
 | ||
|     @BindView(R.id.app_bar)
 | ||
|     AppBarLayout appBarLayout;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     public Fragment_paihang() {
 | ||
|         // Required empty public constructor
 | ||
|     }
 | ||
|     protected   void processArguments(){
 | ||
|         if (getArguments() != null) {
 | ||
|             Bundle bundle = getArguments() ;
 | ||
|         }
 | ||
| 
 | ||
|     }
 | ||
|     @Override
 | ||
|     protected  void fillData() {
 | ||
|         if(rvPaihang.getAdapter()==null) {
 | ||
|             rvPaihang.setLayoutManager(new LinearLayoutManager(activity));
 | ||
|             rvPaihang.setAdapter(mAdapter);
 | ||
|         }
 | ||
|         if(mMoreData!=null) {
 | ||
|             if(mMoreData.size()>0) {
 | ||
|                 pageNo++;
 | ||
|             }
 | ||
|             int status = getPageCount() >= pageNo ? BookListAdapter.LOADING_MORE : BookListAdapter.NO_LOAD_MORE;
 | ||
|             //  mAdapter.setPercent(pageNo/pageCount);
 | ||
|             mAdapter.AddFooterItem(mMoreData);
 | ||
|             mAdapter.changeMoreStatus(status);
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
|         mAdapter.notifyDataSetChanged();
 | ||
| 
 | ||
|     }
 | ||
| 
 | ||
|     public static Fragment_paihang newInstance(String param1, String param2) {
 | ||
|         Fragment_paihang fragment = new Fragment_paihang();
 | ||
|         Bundle args = new Bundle();
 | ||
| 
 | ||
|         fragment.setArguments(args);
 | ||
|         return fragment;
 | ||
|     }
 | ||
| 
 | ||
|     @Override
 | ||
|     public void onCreate(Bundle savedInstanceState) {
 | ||
|         super.onCreate(savedInstanceState);
 | ||
|         if (getArguments() != null) {
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
|     }
 | ||
| 
 | ||
|     @Override
 | ||
|     protected int getLayoutRes() {
 | ||
|         return R.layout.fragment_fragment_paihang;
 | ||
|     }
 | ||
| 
 | ||
|     @Override
 | ||
|     public void initData() {
 | ||
|       loadSearchData();
 | ||
|     }
 | ||
|       private void loadSearchData(){
 | ||
|         int pn = pageNo;
 | ||
|         if(lstSex==null){
 | ||
|            // getSearchTabTtitle();
 | ||
|            // initTabs();
 | ||
|             appBarLayout.setVisibility(View.GONE);
 | ||
|             return;
 | ||
|         }
 | ||
|           appBarLayout.setVisibility(View.VISIBLE);
 | ||
|         String sex = lstSex.get(tab1Pos);
 | ||
|         String cate = lstNt.get(tab2Pos);
 | ||
|         if(pageNo==1) {
 | ||
| 
 | ||
|             if (mData != null) {  //下拉刷新
 | ||
|                 mData = new ArrayList<Novel>();
 | ||
|                 mAdapter.setData(mData);
 | ||
| 
 | ||
|             } else {
 | ||
| 
 | ||
|                 mData = new ArrayList<Novel>();
 | ||
|                 mAdapter = new BookListAdapter(activity, mData, R.layout.recycle_list_item_horizon, new OnItemClickListener() {
 | ||
| 
 | ||
|                     @Override
 | ||
|                     public void onItemClick(View view, int position) {
 | ||
|                         showBookDetail(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) {
 | ||
| 
 | ||
|                     }
 | ||
|                 });
 | ||
|                 mAdapter.setShowTop(true);
 | ||
|                 mAdapter.setShowFootView(true);
 | ||
|                 rvPaihang.setLayoutManager(new LinearLayoutManager(activity));
 | ||
|                 rvPaihang.setAdapter(mAdapter);
 | ||
| 
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|         mMoreData =null;
 | ||
|         OnSuccessAndFaultListener successAndFaultListener =   new OnSuccessAndFaultListener() {
 | ||
|             @Override
 | ||
|             public void onSuccess(String result) {
 | ||
|                 error_try=0;
 | ||
|                 Log.d(TAG, String.format("init data HttpMethods successed on init, trycnt %s   " ,error_try));
 | ||
|                 // 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();
 | ||
|                 }
 | ||
|                 handler.sendEmptyMessage(1);
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
|             @Override
 | ||
|             public void onFault(String errorMsg) {
 | ||
|                 //失败
 | ||
| 
 | ||
|             //    Log.d(TAG, String.format("init data HttpMethods error on init, trycnt %s  " ,error_try ));
 | ||
|                 //  getSearchTabTtitle();
 | ||
|                 retryErorr(0);
 | ||
|             }
 | ||
|         };
 | ||
|           showProgressDialog(false, "正在加载...");
 | ||
|         BookSubscribe.getCateNovelList(cate, pageNo, tab1Pos+1,  Constants.lstProgressType.get(tab3Pos).getId(), new OnSuccessAndFaultSub(successAndFaultListener, getActivity()));
 | ||
| 
 | ||
| 
 | ||
|     }
 | ||
|     @Override
 | ||
|     public void initViews(){
 | ||
|         appBarLayout.setVisibility(View.GONE);
 | ||
|         if(lstNt==null) {
 | ||
|             CommonUtil.getSearchTabTtitle(getActivity());
 | ||
|             showProgressDialog(false,"正在加载...");
 | ||
|             new Thread(){
 | ||
|                 @Override
 | ||
|                 public void run() {
 | ||
|                     Log.d(TAG, "prepare book to load options for search"  );
 | ||
|                     while(lstNt==null){
 | ||
|                         try {
 | ||
|                             Thread.sleep(100);
 | ||
|                         } catch (InterruptedException e) {
 | ||
|                             e.printStackTrace();
 | ||
|                         }
 | ||
|                     }
 | ||
| 
 | ||
|                     handler.sendEmptyMessage(MSG_INIT_TAB);
 | ||
|                 }
 | ||
|             }.start();
 | ||
| 
 | ||
|         }
 | ||
|         else {
 | ||
|             initTabs();
 | ||
|         }
 | ||
| 
 | ||
|         initLoadMoreListener();
 | ||
| 
 | ||
| 
 | ||
|     }
 | ||
| 
 | ||
|     @Override
 | ||
|      void initTabs() {
 | ||
|         tmp=0;
 | ||
|      /*
 | ||
|         while(lstNt==null){
 | ||
|             try {
 | ||
|                 Thread.sleep(10);
 | ||
|             } catch (InterruptedException e) {
 | ||
|                 e.printStackTrace();
 | ||
|             }
 | ||
|         }*/
 | ||
| 
 | ||
| 
 | ||
|           List<String> lstType = new ArrayList<String>()  ;//Arrays.asList(lstProgress);
 | ||
|           for(ProgressType progressType : Constants.lstProgressType){
 | ||
|               lstType.add(progressType.getName());
 | ||
|           }
 | ||
|          topic_layout.initTabNames(lstNt) ;
 | ||
|          topic_layout1.initTabNames( lstSex) ;
 | ||
|          topic_layout2.initTabNames(lstType) ;
 | ||
|        // topic_layout.initTabNames(lstNt);
 | ||
|         appBarLayout.setVisibility(View.VISIBLE);
 | ||
|         topic_layout.setOnTabSelectListener(new MultiLayout.OnTabSelectListener() {
 | ||
|             @Override
 | ||
|             public void select(TextView textView, int i, int i1) {
 | ||
|                 Log.d(TAG, String.format("select: text %s,i %s i1 %s ",textView.getText(),i,i1));
 | ||
|                 tab2Pos = i1;
 | ||
|                tabChanged();
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|         });
 | ||
|         topic_layout1.setOnTabSelectListener(new MultiLayout.OnTabSelectListener() {
 | ||
|             @Override
 | ||
|             public void select(TextView textView, int i, int i1) {
 | ||
|                 Log.d(TAG, String.format("select: text %s,i %s i1 %s ",textView.getText(),i,i1));
 | ||
|                 tab1Pos = i1;
 | ||
|                 tabChanged();
 | ||
|             }
 | ||
| 
 | ||
|         });
 | ||
|         topic_layout2.setOnTabSelectListener(new MultiLayout.OnTabSelectListener() {
 | ||
|             @Override
 | ||
|             public void select(TextView textView, int i, int i1) {
 | ||
|                 Log.d(TAG, String.format("select: text %s,i %s i1 %s ",textView.getText(),i,i1));
 | ||
|                 tab3Pos = i1;
 | ||
|                 tabChanged();
 | ||
|             }
 | ||
|         });
 | ||
| 
 | ||
|      // tabChanged();
 | ||
| 
 | ||
|     }
 | ||
|     int tmp=0;
 | ||
|     void tabChanged() {
 | ||
| 
 | ||
|         Log.d(TAG, String.format("tabChanged: to load data tmp %s" , tmp ));
 | ||
|         tmp++;
 | ||
| 
 | ||
|        /* Toast.makeText(activity,   String.format( "TAB1 :{0}, TAB2 :{1}, TAB3 :{3}",
 | ||
|                 mData1.get(tab1Pos).getTabTitle(),
 | ||
|                 mData2.get(tab2Pos).getTabTitle(),
 | ||
|                 mData3.get(tab3Pos).getTabTitle()),
 | ||
|                 Toast.LENGTH_SHORT).show();
 | ||
|  String selectedKey = mData1.get(tab1Pos).getTabTitle() +" " +
 | ||
|                mData2.get(tab2Pos).getTabTitle() +" " +
 | ||
|                mData3.get(tab3Pos).getTabTitle() ;
 | ||
|         */
 | ||
|        if(lstSex==null || lstSex.size()==0) return;
 | ||
| 
 | ||
|        pageNo=1;
 | ||
| 
 | ||
|         String sex = lstSex.get(tab1Pos);
 | ||
|         String cate = lstNt.get(tab2Pos);
 | ||
|         String selectedKey = lstSex.get(tab1Pos) +" " +
 | ||
|                 cate +" " +  Constants.lstProgressType.get(tab3Pos).getName();
 | ||
|               //  lstProgress[tab3Pos]  ;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|       //  Toast.makeText(activity,  selectedKey, Toast.LENGTH_SHORT).show();
 | ||
|         tvHint.setText(selectedKey);
 | ||
|         Log.d(TAG, String.format("tabChanged: to load data %s,pageno %s, tmp %s" , selectedKey,pageNo ,tmp));
 | ||
| 
 | ||
|         if( tmp<lstProgress.length) return;
 | ||
| 
 | ||
|         loadSearchData();
 | ||
| 
 | ||
| 
 | ||
|     }
 | ||
|     private void initLoadMoreListener() {
 | ||
| 
 | ||
|         rvPaihang.addOnScrollListener(new RecyclerView.OnScrollListener() {
 | ||
|             int lastVisibleItem ,visibleItemCount,totalItemCount,pastVisiblesItems;
 | ||
| 
 | ||
|             @Override
 | ||
|             public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
 | ||
|                 super.onScrollStateChanged(recyclerView, newState);
 | ||
| 
 | ||
|                 //判断RecyclerView的状态 是空闲时,同时,是最后一个可见的ITEM时才加载
 | ||
| 
 | ||
|                 Log.d(TAG, String.format("onScrollStateChanged , state %s ,lastVisibleitem %s ,getItemCount %s,pageno %s ,pageCount %s",
 | ||
|                         newState==RecyclerView.SCROLL_STATE_IDLE,lastVisibleItem,mAdapter.getItemCount(),pageNo,getPageCount()));
 | ||
|                 if(newState==RecyclerView.SCROLL_STATE_IDLE&&lastVisibleItem+1==mAdapter.getItemCount()){
 | ||
| 
 | ||
|                     if(pageNo <= getPageCount()) {
 | ||
|                         //设置正在加载更多
 | ||
|                         mAdapter.changeMoreStatus(mAdapter.LOADING_MORE);
 | ||
| 
 | ||
|                         //改为网络请求
 | ||
|                       loadSearchData();
 | ||
|                     }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();
 | ||
| 
 | ||
|                // if (dy > 0) {
 | ||
|                     visibleItemCount = layoutManager.getChildCount();
 | ||
|                     totalItemCount = layoutManager.getItemCount();
 | ||
|                     pastVisiblesItems = layoutManager.findFirstVisibleItemPosition();
 | ||
| 
 | ||
| 
 | ||
|              //   }
 | ||
|                 Log.d(TAG, String.format("onScrolled:dy %s,visibleItemCount %s,totalItemCount %s,pastVisiblesItems %s ",
 | ||
|                       dy,  visibleItemCount,totalItemCount,pastVisiblesItems));
 | ||
|                     //最后一个可见的ITEM
 | ||
|                 lastVisibleItem=layoutManager.findLastVisibleItemPosition();
 | ||
|                 lastVisibleItem=layoutManager.findLastCompletelyVisibleItemPosition();
 | ||
|             }
 | ||
|         });
 | ||
| 
 | ||
|     }
 | ||
| 
 | ||
| //----------------绑定列表
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     void initialBookList() {
 | ||
|      //   rvPaihang.setLayoutManager(new LinearLayoutManager(activity));
 | ||
|     //    rvPaihang.setAdapter(mAdapter);
 | ||
| 
 | ||
|     }
 | ||
| 
 | ||
|     @BindView(R.id.tvHint)
 | ||
|     TextView tvHint;
 | ||
|     //------------滑动监听
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     @Override
 | ||
|     public void setFTag() {
 | ||
| 
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
|     @Override
 | ||
|     public void onResume() {
 | ||
|         super.onResume();
 | ||
|         MobclickAgent.onPageStart(TAG);
 | ||
|     }
 | ||
|     @Override
 | ||
|     public void onPause(){
 | ||
|         super.onPause();
 | ||
|         MobclickAgent.onPageEnd(TAG);
 | ||
|     }
 | ||
| }
 |