package com.novelbook.android.Fragments; import android.app.ProgressDialog; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.Button; import android.widget.ImageButton; import android.widget.ListView; import android.widget.TextView; import com.novelbook.android.MarkActivity; import com.novelbook.android.R; import com.novelbook.android.ReadActivity; import com.novelbook.android.adapter.CatalogueAdapter; import com.novelbook.android.db.Chapter; import com.novelbook.android.db.DownloadTask; import com.novelbook.android.db.Novel; import com.novelbook.android.netutils.NetUtil; import com.novelbook.android.utils.Constants; import com.novelbook.android.utils.PageFactory; import com.umeng.analytics.MobclickAgent; import org.litepal.LitePal; import java.io.File; import java.util.ArrayList; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; /** * Created by Administrator on 2016/8/31 0031. */ public class CatalogFragment extends BasicFragment implements MarkActivity.Sortcat { public static final String TAG=CatalogFragment.class.getSimpleName(); public static final String ARGUMENT = "argument"; private PageFactory pageFactory; ArrayList catalogueList = new ArrayList<>(); ArrayList catalogCached = new ArrayList<>(); @BindView(R.id.lv_catalogue) ListView lv_catalogue; @BindView(R.id.btnRefresh) Button btnRefresh; /* @BindView(R.id.tvTitle) TextView tvTitle; @BindView(R.id.tvChapts) TextView tvChapters; @BindView(R.id.btnSort) ImageButton ibSort;*/ CatalogueAdapter catalogueAdapter; protected void processArguments(){ if (getArguments() != null) { Bundle bundle = getArguments() ; } } boolean isAsc = true; boolean isFirstLoad = true; @Override protected void fillData() { catalogueList.clear(); catalogueList.addAll(pageFactory.getChapters()); // int currentChp =pageFactory.getCurrentChapter()-1; int currentChp =pageFactory.getNovle().getLastReadChapt()-1; if(!isAsc){ catalogueList =revertArray(); currentChp = catalogueList.size() -currentChp-1; } catalogueAdapter.setData(catalogueList); catalogueAdapter.setCharter(currentChp+1); catalogueAdapter.setCahedChapters(catalogCached); catalogueAdapter.notifyDataSetChanged(); int count= lv_catalogue.getCount(); if(count >=pageFactory.getCurrentChapter()&& isFirstLoad){ lv_catalogue.setSelection(currentChp); isFirstLoad =false; } /* tvTitle.setText(pageFactory.getBookName()); tvChapters.setText(String.format("共%s章",catalogueList.size()));*/ if(catalogueList.size() ==0) { btnRefresh.setVisibility(View.VISIBLE); }else btnRefresh.setVisibility(View.GONE); } @OnClick(R.id.btnRefresh) void refresh(View view) { pageFactory.refreshCate(); loadData(); btnRefresh.setVisibility(View.GONE); } ArrayList revertArray(){ ArrayList tmp = new ArrayList<>(); for(int i = catalogueList.size()-1;i>=0;i--){ tmp.add(catalogueList.get(i)); } return tmp; } /* @OnClick(R.id.btnSort) void Onclick(View view){ if(view.getId() == R.id.btnSort){ Log.d(TAG, "Onclick: sorted"); catalogueList = getArray(); catalogueAdapter.notifyDataSetChanged(); } }*/ @Override protected int getLayoutRes() { return R.layout.fragment_catalog; } @Override protected void initData() { pageFactory = PageFactory.getInstance(activity.getApplicationContext()); loadData(); } public void loadData(){ showProgressDialog(false,"正在读取目录数据,请稍等"); catalogueList.clear(); catalogueAdapter = new CatalogueAdapter(getContext(), catalogueList); lv_catalogue.setAdapter(catalogueAdapter); Log.d(TAG, String .format("prepare book: start to open book cate of %s" , pageFactory.getNovle().getName())); new Thread() { @Override public void run() { // ArrayList list =(ArrayList) LitePal.where("novelId=? and domain =? " ,pageFactory.getNovle().getId()+"",pageFactory.getSite().getDomain()).find(Chapter.class); String domain =pageFactory.getNovle().getDomain(); if(TextUtils.isEmpty(domain)){ domain=""; } ArrayList list = new ArrayList(); if(!TextUtils.isEmpty(domain)) { list = (ArrayList) LitePal.where("novelId=? and domain =? ", pageFactory.getNovle().getId() + "", domain).find(Chapter.class); } File file; for(Chapter cp : list){ if(!TextUtils.isEmpty(cp.getChapterPath())) { String filename =pageFactory.getChapterFileName(cp.getIndex()); file = new File(filename); if(file.exists()) { Log.d(TAG, String .format("prepare book: load cats,chapter %s ,id %s,file %s is exist" ,cp.getChapterName(),cp.getIndex() , filename)); catalogCached.add(cp.getIndex()); } } } Log.d(TAG, String .format("prepare book: to open book cate to sleep ,pageFactory.getChapters().size() %s " , pageFactory.getChapters().size())); int maxSlept =NetUtil.isNetworkConnected()?250 :100; int slepttime = 0; while ( slepttime < maxSlept*50 && ( pageFactory.isReadingCatalogs() || pageFactory.getChapters().size() == 0)) { try { Log.d(TAG, String .format("prepare book: to open book cate to sleep %s,pageFactory.getChapters().size() %s " , 50,pageFactory.getChapters().size())); sleep(50); slepttime+=50; } catch (InterruptedException e) { e.printStackTrace(); } } Log.d(TAG, String .format("prepare book:to open book cate slept %s" , slepttime)); /* if ( !pageFactory.isReadingCatalogs() && pageFactory.getChapters().size() == 0) { handler.sendEmptyMessage(2); }else{ handler.sendEmptyMessage(1); }*/ handler.sendEmptyMessage(1); } }.start(); } Handler handler = new Handler() { @Override public void handleMessage(Message msg) { Log.d(TAG, "prepare book handleMessage: msg" + msg.what); hideProgressSelf(); if (msg.what == 1) { try { fillData(); }catch (Exception e){ Log.e(TAG, "handleMessage: filldata error ", e); } } } }; @Override protected void initListener() { lv_catalogue.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { // showProgressDialog(true,"请稍等"); Log.d(TAG, String .format("prepare book: getPageWidget is null? %s",pageFactory.getPageWidget()==null)); // if(pageFactory.getPageWidget()==null){ Novel novel = pageFactory.getNovle(); Chapter cp = catalogueList.get(position); Log.d(TAG, String .format("prepare book: catalog list postion %s, cp.index %s ,cp.name %s ",position,cp.getIndex(),cp.getChapterName())); if(novel!=null){ novel.setLastReadChapt(cp.getIndex()); novel.setLastReadPos(1); novel.setLastReadChaptName(cp.getChapterName()); novel.update(novel.getId()); ReadActivity.openBook(novel, getActivity()); } getActivity().finish(); } }); } @Override protected void initViews() { lv_catalogue.setFastScrollEnabled(true); ((MarkActivity) getActivity()).setSortcat(this); //lv_catalogue.setFastScrollStyle(R.style.FastScrollTheme); //不起作用 } void initSwipeRefreshLayout(){ super.initSwipeRefreshLayout(); mSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { // 开始刷新,设置当前为刷新状态 //swipeRefreshLayout.setRefreshing(true); // isAsc =true; refresh(btnRefresh); } }); } @Override public void setFTag() { } /** * 用于从Activity传递数据到Fragment * @param bookpath * @return */ public static CatalogFragment newInstance(String bookpath) { Bundle bundle = new Bundle(); bundle.putString(ARGUMENT, bookpath); CatalogFragment catalogFragment = new CatalogFragment(); catalogFragment.setArguments(bundle); return catalogFragment; } @Override public void sortList() { isAsc =!isAsc; fillData(); } @Override public void refresh() { refresh(null); } @Override public void onResume() { super.onResume(); MobclickAgent.onPageStart(TAG); } @Override public void onPause(){ super.onPause(); MobclickAgent.onPageEnd(TAG); } private ProgressDialog mProgressDialog2; public void showProgressDialog(boolean flag, String message) { if (mProgressDialog2 == null) { mProgressDialog2 = new ProgressDialog(getActivity()); mProgressDialog2.setProgressStyle(ProgressDialog.STYLE_SPINNER); mProgressDialog2.setCancelable(true); mProgressDialog2.setCanceledOnTouchOutside(false); mProgressDialog2.setMessage(message); } if(NetUtil.isNetworkConnected()) mProgressDialog2.show(); Log.d(TAG, "prepare book showProgressDialog2 called" ); } public void hideProgressSelf() { Log.d(TAG, "prepare book hideProgress2 called" ); /* try{ throw new Exception("who dismissed"); }catch (Exception e){ Log.e(TAG, "prepare book hideProgress2: ", e); }*/ if (mProgressDialog2 == null) return; if (mProgressDialog2.isShowing()) { mProgressDialog2.dismiss(); } mSwipeRefresh.setRefreshing(false); } }