parent
							
								
									bbfe58c1db
								
							
						
					
					
						commit
						a6dc3776a5
					
				
									
										Binary file not shown.
									
								
							
						
									
										Binary file not shown.
									
								
							
						| @ -1,84 +0,0 @@ | ||||
| package xyz.fycz.myreader.ui.fragment; | ||||
| 
 | ||||
| 
 | ||||
| import android.os.Bundle; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.widget.ProgressBar; | ||||
| import androidx.fragment.app.Fragment; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
| import butterknife.BindView; | ||||
| import butterknife.ButterKnife; | ||||
| import butterknife.Unbinder; | ||||
| import com.scwang.smartrefresh.layout.SmartRefreshLayout; | ||||
| import xyz.fycz.myreader.R; | ||||
| import xyz.fycz.myreader.ui.presenter.BookStorePresenter; | ||||
| import xyz.fycz.myreader.widget.RefreshLayout; | ||||
| 
 | ||||
| /** | ||||
|  * A simple {@link Fragment} subclass. | ||||
|  */ | ||||
| public class BookStoreFragment extends Fragment { | ||||
|     @BindView(R.id.refresh_layout) | ||||
|     RefreshLayout mRlRefresh; | ||||
|     @BindView(R.id.rv_type_list) | ||||
|     RecyclerView rvTypeList; | ||||
|     @BindView(R.id.rv_book_list) | ||||
|     RecyclerView rvBookList; | ||||
|     @BindView(R.id.srl_book_list) | ||||
|     SmartRefreshLayout srlBookList; | ||||
|     @BindView(R.id.pb_loading) | ||||
|     ProgressBar pbLoading; | ||||
| 
 | ||||
|     Unbinder unbinder; | ||||
|     private BookStorePresenter mBookStorePresenter; | ||||
|     private boolean isFirstInit; | ||||
| 
 | ||||
|     public BookStoreFragment() { | ||||
|         // Required empty public constructor
 | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     @Override | ||||
|     public View onCreateView(LayoutInflater inflater, ViewGroup container, | ||||
|                              Bundle savedInstanceState) { | ||||
|         // Inflate the layout for this fragment
 | ||||
|         View view = inflater.inflate(R.layout.fragment_book_store, container, false); | ||||
|         unbinder = ButterKnife.bind(this, view); | ||||
|         /*mBookStorePresenter = new BookStorePresenter(this); | ||||
|         mBookStorePresenter.start();*/ | ||||
|         isFirstInit = true; | ||||
|         return view; | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     public void lazyLoad() { | ||||
|         if (isFirstInit) { | ||||
|             mBookStorePresenter = new BookStorePresenter(this); | ||||
|             mBookStorePresenter.start(); | ||||
|             isFirstInit = false; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public RecyclerView getRvTypeList() { | ||||
|         return rvTypeList; | ||||
|     } | ||||
| 
 | ||||
|     public RecyclerView getRvBookList() { | ||||
|         return rvBookList; | ||||
|     } | ||||
| 
 | ||||
|     public SmartRefreshLayout getSrlBookList() { | ||||
|         return srlBookList; | ||||
|     } | ||||
| 
 | ||||
|     public ProgressBar getPbLoading() { | ||||
|         return pbLoading; | ||||
|     } | ||||
| 
 | ||||
|     public RefreshLayout getmRlRefresh() { | ||||
|         return mRlRefresh; | ||||
|     } | ||||
| } | ||||
| @ -1,269 +0,0 @@ | ||||
| package xyz.fycz.myreader.ui.presenter; | ||||
| 
 | ||||
| import android.annotation.SuppressLint; | ||||
| import android.content.Intent; | ||||
| import android.os.Handler; | ||||
| import android.os.Message; | ||||
| import android.view.View; | ||||
| import androidx.recyclerview.widget.LinearLayoutManager; | ||||
| import xyz.fycz.myreader.base.BasePresenter; | ||||
| import xyz.fycz.myreader.webapi.callback.ResultCallback; | ||||
| import xyz.fycz.myreader.common.APPCONST; | ||||
| import xyz.fycz.myreader.ui.dialog.ChangeSourceDialog; | ||||
| import xyz.fycz.myreader.ui.dialog.DialogCreator; | ||||
| import xyz.fycz.myreader.entity.bookstore.BookType; | ||||
| import xyz.fycz.myreader.entity.bookstore.RankBook; | ||||
| import xyz.fycz.myreader.greendao.entity.Book; | ||||
| import xyz.fycz.myreader.ui.activity.BookDetailedActivity; | ||||
| import xyz.fycz.myreader.ui.activity.MainActivity; | ||||
| import xyz.fycz.myreader.ui.adapter.BookStoreBookAdapter; | ||||
| import xyz.fycz.myreader.ui.adapter.BookStoreBookTypeAdapter; | ||||
| import xyz.fycz.myreader.ui.fragment.BookStoreFragment; | ||||
| import xyz.fycz.myreader.util.ToastUtils; | ||||
| import xyz.fycz.myreader.webapi.crawler.find.QiDianMobileRank; | ||||
| 
 | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| 
 | ||||
| 
 | ||||
| public class BookStorePresenter implements BasePresenter { | ||||
| 
 | ||||
|     private BookStoreFragment mBookStoreFragment; | ||||
|     private MainActivity mMainActivity; | ||||
|     private LinearLayoutManager mLinearLayoutManager; | ||||
|     private BookStoreBookTypeAdapter mBookStoreBookTypeAdapter; | ||||
|     private List<BookType> mBookTypes; | ||||
| 
 | ||||
|     private BookStoreBookAdapter mBookStoreBookAdapter; | ||||
|     private List<Book> bookList = new ArrayList<>(); | ||||
| 
 | ||||
|     private BookType curType; | ||||
|     private QiDianMobileRank findCrawler; | ||||
| 
 | ||||
|     private int page = 1; | ||||
| 
 | ||||
|     @SuppressLint("HandlerLeak") | ||||
|     private Handler mHandler = new Handler() { | ||||
|         @Override | ||||
|         public void handleMessage(Message msg) { | ||||
|             switch (msg.what) { | ||||
|                 case 1: | ||||
|                     initTypeList(); | ||||
|                     mBookStoreFragment.getmRlRefresh().showFinish(); | ||||
|                     break; | ||||
|                 case 2: | ||||
|                     List<Book> bookList = (List<Book>) msg.obj; | ||||
|                     initBookList(bookList); | ||||
|                     mBookStoreFragment.getSrlBookList().setEnableRefresh(true); | ||||
|                     mBookStoreFragment.getSrlBookList().setEnableLoadMore(true); | ||||
|                     mBookStoreFragment.getPbLoading().setVisibility(View.GONE); | ||||
|                     break; | ||||
|                 case 3: | ||||
|                     mBookStoreFragment.getPbLoading().setVisibility(View.VISIBLE); | ||||
|                     break; | ||||
|                 case 4: | ||||
|                     mBookStoreFragment.getPbLoading().setVisibility(View.GONE); | ||||
|                     mBookStoreFragment.getSrlBookList().finishRefresh(false); | ||||
|                     mBookStoreFragment.getSrlBookList().finishLoadMore(false); | ||||
|                     break; | ||||
|                 case 5: | ||||
|                     mBookStoreFragment.getmRlRefresh().showError(); | ||||
|                     break; | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     public BookStorePresenter(BookStoreFragment bookStoreFragment) { | ||||
|         mBookStoreFragment = bookStoreFragment; | ||||
|         mMainActivity = ((MainActivity) (mBookStoreFragment.getActivity())); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void start() { | ||||
|         mBookStoreFragment.getSrlBookList().setEnableRefresh(false); | ||||
|         mBookStoreFragment.getSrlBookList().setEnableLoadMore(false); | ||||
|         findCrawler = new QiDianMobileRank(true); | ||||
|         //小说列表下拉加载更多事件
 | ||||
|         mBookStoreFragment.getSrlBookList().setOnLoadMoreListener(refreshLayout -> { | ||||
|             page++; | ||||
|             BookStorePresenter.this.getBooksData(); | ||||
|         }); | ||||
| 
 | ||||
|         //小说列表上拉刷新事件
 | ||||
|         mBookStoreFragment.getSrlBookList().setOnRefreshListener(refreshLayout -> { | ||||
|             page = 1; | ||||
|             BookStorePresenter.this.getBooksData(); | ||||
|         }); | ||||
| 
 | ||||
| 
 | ||||
|         mBookStoreBookAdapter = new BookStoreBookAdapter(findCrawler.hasImg(), mMainActivity); | ||||
|         mBookStoreFragment.getRvBookList().setLayoutManager(new LinearLayoutManager(mMainActivity)); | ||||
|         mBookStoreFragment.getRvBookList().setAdapter(mBookStoreBookAdapter); | ||||
|         mBookStoreBookAdapter.setOnItemClickListener((view, pos) -> { | ||||
|             Book book = bookList.get(pos); | ||||
|             if (!findCrawler.needSearch()) { | ||||
|                 Intent intent = new Intent(mMainActivity, BookDetailedActivity.class); | ||||
|                 intent.putExtra(APPCONST.BOOK, book); | ||||
|                 mMainActivity.startActivity(intent); | ||||
|             } else { | ||||
|                 mHandler.sendMessage(mHandler.obtainMessage(3)); | ||||
|                 ChangeSourceDialog csd = new ChangeSourceDialog(mMainActivity, bookList.get(pos)); | ||||
|                 csd.initOneBook(new ResultCallback() { | ||||
|                     @Override | ||||
|                     public void onFinish(Object o, int code) { | ||||
|                         Book searchBook = (Book) o; | ||||
|                         book.setChapterUrl(searchBook.getChapterUrl()); | ||||
|                         book.setSource(searchBook.getSource()); | ||||
|                         Intent intent = new Intent(mMainActivity, BookDetailedActivity.class); | ||||
|                         intent.putExtra(APPCONST.BOOK, book); | ||||
|                         mMainActivity.startActivity(intent); | ||||
|                         mHandler.sendMessage(mHandler.obtainMessage(4)); | ||||
|                     } | ||||
| 
 | ||||
|                     @Override | ||||
|                     public void onError(Exception e) { | ||||
|                         DialogCreator.createTipDialog(mMainActivity,"未搜索到该书籍,无法进入书籍详情!"); | ||||
|                     } | ||||
|                 }); | ||||
|             } | ||||
|         }); | ||||
| 
 | ||||
|         getData(); | ||||
| 
 | ||||
|         mBookStoreFragment.getmRlRefresh().setOnReloadingListener(this::getData); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|      * 获取页面数据 | ||||
|      */ | ||||
|     private void getData() { | ||||
|         /*BookStoreApi.getBookTypeList(findCrawler, new ResultCallback() { | ||||
|             @Override | ||||
|             public void onFinish(Object o, int code) { | ||||
|                 mBookTypes = (ArrayList<BookType>) o; | ||||
|                 curType = mBookTypes.get(0); | ||||
|                 mHandler.sendMessage(mHandler.obtainMessage(1)); | ||||
|                 page = 1; | ||||
|                 getBooksData(); | ||||
|             } | ||||
| 
 | ||||
|             @Override | ||||
|             public void onError(Exception e) { | ||||
|                 e.printStackTrace(); | ||||
|                 mHandler.sendEmptyMessage(5); | ||||
|             } | ||||
|         });*/ | ||||
|         mBookTypes = findCrawler.getBookTypes(); | ||||
|         curType = mBookTypes.get(0); | ||||
|         mHandler.sendMessage(mHandler.obtainMessage(1)); | ||||
|         page = 1; | ||||
|         getBooksData(); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 获取小数列表数据 | ||||
|      */ | ||||
|     private void getBooksData() { | ||||
|         if (findCrawler.getTypePage(curType, page)) { | ||||
|             mBookStoreFragment.getSrlBookList().finishLoadMoreWithNoMoreData(); | ||||
|             return; | ||||
|         } | ||||
|         mHandler.sendEmptyMessage(3); | ||||
|         /*BookStoreApi.getBookRankList(curType.getUrl(), findCrawler, new ResultCallback() { | ||||
|             @Override | ||||
|             public void onFinish(Object o, int code) { | ||||
|                 mHandler.sendMessage(mHandler.obtainMessage(2, o)); | ||||
|             } | ||||
| 
 | ||||
|             @Override | ||||
|             public void onError(Exception e) { | ||||
|                 mHandler.sendMessage(mHandler.obtainMessage(4)); | ||||
|                 ToastUtils.showError("数据加载失败!\n" + e.getMessage()); | ||||
|                 e.printStackTrace(); | ||||
|             } | ||||
|         });*/ | ||||
|         findCrawler.getRankBooks(curType, new ResultCallback() { | ||||
|             @Override | ||||
|             public void onFinish(Object o, int code) { | ||||
|                 List<Book> books = new ArrayList<>(); | ||||
|                 for (RankBook rb : (List<RankBook>) o){ | ||||
|                     Book book = new Book(); | ||||
|                     book.setName(rb.getbName()); | ||||
|                     book.setAuthor(rb.getbAuth()); | ||||
|                     book.setImgUrl(rb.getImg()); | ||||
|                     String cat = rb.getCat(); | ||||
|                     book.setType(cat.contains("小说") || cat.length() >= 4 ? cat : cat + "小说"); | ||||
|                     book.setNewestChapterTitle(rb.getDesc()); | ||||
|                     book.setDesc(rb.getDesc()); | ||||
|                     book.setUpdateDate(rb.getCnt()); | ||||
|                     books.add(book); | ||||
|                 } | ||||
|                 mHandler.sendMessage(mHandler.obtainMessage(2, books)); | ||||
|             } | ||||
| 
 | ||||
|             @Override | ||||
|             public void onError(Exception e) { | ||||
|                 mHandler.sendMessage(mHandler.obtainMessage(4)); | ||||
|                 ToastUtils.showError("数据加载失败!\n" + e.getMessage()); | ||||
|                 e.printStackTrace(); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|      * 初始化类别列表 | ||||
|      */ | ||||
|     private void initTypeList() { | ||||
| 
 | ||||
|         //设置布局管理器
 | ||||
|         mLinearLayoutManager = new LinearLayoutManager(mBookStoreFragment.getActivity()); | ||||
|         mLinearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); | ||||
|         mBookStoreFragment.getRvTypeList().setLayoutManager(mLinearLayoutManager); | ||||
|         mBookStoreBookTypeAdapter = new BookStoreBookTypeAdapter(mBookStoreFragment.getActivity(), mBookTypes); | ||||
|         mBookStoreFragment.getRvTypeList().setAdapter(mBookStoreBookTypeAdapter); | ||||
| 
 | ||||
|         //点击事件
 | ||||
|         mBookStoreBookTypeAdapter.setOnItemClickListener((pos, view) -> { | ||||
|             if (curType.equals(mBookTypes.get(pos))) { | ||||
|                 return; | ||||
|             } | ||||
|             page = 1; | ||||
|             curType = mBookTypes.get(pos); | ||||
|             mBookStoreFragment.getSrlBookList().resetNoMoreData(); | ||||
|             BookStorePresenter.this.getBooksData(); | ||||
|         }); | ||||
| 
 | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|      * 初始化小说列表 | ||||
|      */ | ||||
|     private void initBookList(List<Book> bookList) { | ||||
|         if (page == 1) { | ||||
|             mBookStoreBookAdapter.refreshItems(bookList); | ||||
|             this.bookList.clear(); | ||||
|             this.bookList.addAll(bookList); | ||||
|             mBookStoreFragment.getRvBookList().scrollToPosition(0); | ||||
|         } else { | ||||
|             this.bookList.addAll(bookList); | ||||
|             mBookStoreBookAdapter.addItems(bookList); | ||||
|         } | ||||
| 
 | ||||
|         //刷新动作完成
 | ||||
|         mBookStoreFragment.getSrlBookList().finishRefresh(); | ||||
|         //加载更多完成
 | ||||
|         mBookStoreFragment.getSrlBookList().finishLoadMore(); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| @ -1,58 +0,0 @@ | ||||
| <xyz.fycz.myreader.widget.RefreshLayout | ||||
|         xmlns:android="http://schemas.android.com/apk/res/android" | ||||
|         android:id="@+id/refresh_layout" | ||||
|         android:layout_width="match_parent" | ||||
|         android:layout_height="match_parent" | ||||
|         xmlns:tools="http://schemas.android.com/tools" | ||||
|         xmlns:app="http://schemas.android.com/apk/res-auto" | ||||
|         tools:context="xyz.fycz.myreader.ui.fragment.BookStoreFragment"> | ||||
|     <LinearLayout | ||||
|             android:layout_width="match_parent" | ||||
|             android:layout_height="match_parent" | ||||
|             android:background="@color/colorBackground" | ||||
|             android:orientation="horizontal"> | ||||
| 
 | ||||
|         <androidx.recyclerview.widget.RecyclerView | ||||
|                 android:id="@+id/rv_type_list" | ||||
|                 android:layout_width="match_parent" | ||||
|                 android:layout_height="match_parent" | ||||
|                 android:layout_weight="10"> | ||||
|         </androidx.recyclerview.widget.RecyclerView> | ||||
| 
 | ||||
|         <RelativeLayout | ||||
|                 android:layout_width="match_parent" | ||||
|                 android:layout_height="match_parent" | ||||
|                 android:layout_weight="3"> | ||||
| 
 | ||||
|             <com.scwang.smartrefresh.layout.SmartRefreshLayout | ||||
|                     android:id="@+id/srl_book_list" | ||||
|                     android:layout_width="match_parent" | ||||
|                     android:layout_height="match_parent"> | ||||
|                 <com.scwang.smartrefresh.header.MaterialHeader | ||||
|                         android:layout_width="match_parent" | ||||
|                         android:layout_height="wrap_content"/> | ||||
|                 <androidx.recyclerview.widget.RecyclerView | ||||
|                         android:id="@+id/rv_book_list" | ||||
|                         android:layout_width="match_parent" | ||||
|                         android:layout_height="match_parent"/> | ||||
|                 <com.scwang.smartrefresh.layout.footer.ClassicsFooter | ||||
|                         android:layout_width="match_parent" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         app:srlTextLoading="@string/loading_tip" | ||||
|                         app:srlTextFailed="@string/loading_tip" | ||||
|                         app:srlTextPulling="下拉加载更多" | ||||
|                         app:srlAccentColor="@color/textSecondary"/> | ||||
|             </com.scwang.smartrefresh.layout.SmartRefreshLayout> | ||||
| 
 | ||||
|             <ProgressBar | ||||
|                     android:id="@+id/pb_loading" | ||||
|                     android:layout_width="wrap_content" | ||||
|                     android:layout_height="wrap_content" | ||||
|                     android:layout_centerInParent="true" | ||||
|                     android:visibility="gone"/> | ||||
| 
 | ||||
|         </RelativeLayout> | ||||
| 
 | ||||
| 
 | ||||
|     </LinearLayout> | ||||
| </xyz.fycz.myreader.widget.RefreshLayout> | ||||
| @ -1,2 +1,2 @@ | ||||
| #Tue Jan 19 18:54:31 CST 2021 | ||||
| #Mon Jan 25 21:29:58 CST 2021 | ||||
| VERSION_CODE=180 | ||||
|  | ||||
					Loading…
					
					
				
		Reference in new issue