Selaa lähdekoodia

增加学生端首页达人风采和热门资讯分页逻辑

Pq 2 vuotta sitten
vanhempi
commit
4d5fcef44c

+ 11 - 2
student/src/main/java/com/cooleshow/student/adapter/HomeHotNewsAdapter.java

@@ -5,13 +5,17 @@ import android.widget.ImageView;
 import android.widget.TextView;
 
 import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.module.BaseLoadMoreModule;
+import com.chad.library.adapter.base.module.LoadMoreModule;
 import com.chad.library.adapter.base.viewholder.BaseViewHolder;
 import com.cooleshow.base.utils.GlideUtils;
 import com.cooleshow.student.R;
 import com.cooleshow.student.bean.AppHomeBean;
+import com.cooleshow.student.bean.HomeHotNewsBean;
 
 import java.util.List;
 
+import androidx.annotation.NonNull;
 import androidx.constraintlayout.widget.ConstraintLayout;
 
 /**
@@ -20,7 +24,7 @@ import androidx.constraintlayout.widget.ConstraintLayout;
  * @author Ryan
  * 类说明:
  */
-public class HomeHotNewsAdapter extends BaseQuickAdapter<AppHomeBean.ItemBean, BaseViewHolder> {
+public class HomeHotNewsAdapter extends BaseQuickAdapter<HomeHotNewsBean.RowsBean, BaseViewHolder> implements LoadMoreModule {
 
     public HomeHotNewsAdapter() {
         super(R.layout.item_home_hot_news);
@@ -28,7 +32,7 @@ public class HomeHotNewsAdapter extends BaseQuickAdapter<AppHomeBean.ItemBean, B
 
 
     @Override
-    protected void convert(BaseViewHolder helper, AppHomeBean.ItemBean item) {
+    protected void convert(BaseViewHolder helper, HomeHotNewsBean.RowsBean item) {
         ImageView im_pic = helper.getView(R.id.im_pic);
         GlideUtils.INSTANCE.loadImage(getContext(), item.coverImage, im_pic);
         //名称
@@ -57,4 +61,9 @@ public class HomeHotNewsAdapter extends BaseQuickAdapter<AppHomeBean.ItemBean, B
         }
     }
 
+    @NonNull
+    @Override
+    public BaseLoadMoreModule addLoadMoreModule(@NonNull BaseQuickAdapter<?, ?> baseQuickAdapter) {
+        return new BaseLoadMoreModule(baseQuickAdapter);
+    }
 }

+ 12 - 3
student/src/main/java/com/cooleshow/student/adapter/HomeTalentStyleAdapter.java

@@ -8,6 +8,8 @@ import android.widget.TextView;
 
 import com.airbnb.lottie.LottieAnimationView;
 import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.module.BaseLoadMoreModule;
+import com.chad.library.adapter.base.module.LoadMoreModule;
 import com.chad.library.adapter.base.viewholder.BaseViewHolder;
 import com.cooleshow.base.utils.GlideUtils;
 import com.cooleshow.base.utils.SizeUtils;
@@ -22,7 +24,7 @@ import androidx.constraintlayout.widget.ConstraintLayout;
 /**
  * Author by pq, Date on 2022/8/30.
  */
-public class HomeTalentStyleAdapter extends BaseQuickAdapter<HomeStyleBean.RowsBean, BaseViewHolder> {
+public class HomeTalentStyleAdapter extends BaseQuickAdapter<HomeStyleBean.RowsBean, BaseViewHolder> implements LoadMoreModule {
     private int long_img_height = 0;
     private int normal_img_height = 0;
 
@@ -59,15 +61,16 @@ public class HomeTalentStyleAdapter extends BaseQuickAdapter<HomeStyleBean.RowsB
         TextView tv_tip = holder.getView(R.id.tv_tip);
         View tv_live_anim_tip = holder.getView(R.id.tv_live_anim_tip);
         LottieAnimationView iv_live_anim = holder.getView(R.id.iv_live_anim);
+        View view_live_bg = holder.getView(R.id.view_live_bg);
         if (isLiving) {
-            tv_tip.setVisibility(View.VISIBLE);
+            view_live_bg.setVisibility(View.VISIBLE);
             tv_live_anim_tip.setVisibility(View.VISIBLE);
             iv_live_anim.setVisibility(View.VISIBLE);
             iv_live_anim.playAnimation();
             tv_tip.setText("正在直播");
             tv_tip.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.color_ff0000));
         } else {
-            tv_tip.setVisibility(View.GONE);
+            view_live_bg.setVisibility(View.GONE);
             tv_live_anim_tip.setVisibility(View.GONE);
             iv_live_anim.pauseAnimation();
             iv_live_anim.setVisibility(View.GONE);
@@ -75,4 +78,10 @@ public class HomeTalentStyleAdapter extends BaseQuickAdapter<HomeStyleBean.RowsB
             tv_tip.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.color_999999));
         }
     }
+
+    @NonNull
+    @Override
+    public BaseLoadMoreModule addLoadMoreModule(@NonNull BaseQuickAdapter<?, ?> baseQuickAdapter) {
+        return new BaseLoadMoreModule(baseQuickAdapter);
+    }
 }

+ 11 - 0
student/src/main/java/com/cooleshow/student/api/APIService.java

@@ -15,6 +15,7 @@ import com.cooleshow.student.bean.CourseTableDataBean;
 import com.cooleshow.student.bean.FriendInfoBean;
 import com.cooleshow.student.bean.HelpCenterContentBean;
 import com.cooleshow.student.bean.HomeHotMusicSheetBean;
+import com.cooleshow.student.bean.HomeHotNewsBean;
 import com.cooleshow.student.bean.HomeLiveAndVideoBean;
 import com.cooleshow.student.bean.HomeStyleBean;
 import com.cooleshow.student.bean.HomeworkDetailBean;
@@ -212,6 +213,16 @@ public interface APIService {
     @POST(STUDENT_GROUP + "teacher/stylePage")
     Observable<BaseResponse<HomeStyleBean>> getStylePage(@Body RequestBody body);
 
+
+    /**
+     * 首页学生端热门资讯-分页
+     *
+     * @param body
+     * @return
+     */
+    @POST(CMS_SERVER + "news/page")
+    Observable<BaseResponse<HomeHotNewsBean>> getHotNewsPage(@Body RequestBody body);
+
     /**
      * 我的课程-查询陪练课
      *

+ 161 - 0
student/src/main/java/com/cooleshow/student/bean/HomeHotNewsBean.java

@@ -0,0 +1,161 @@
+package com.cooleshow.student.bean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Author by pq, Date on 2022/9/2.
+ */
+public class HomeHotNewsBean {
+
+    /**
+     * footer : [{"attribute1":"","attribute2":"","background":"","clientType":"","content":"","coverImage":"","createTime":"","delFlag":true,"hrefTarget":"","id":0,"linkType":"","linkUrl":"","memo":"","offlineTime":"","onlineTime":"","order":0,"showTime":0,"status":"","subType":0,"subTypeName":"","subjectIdList":"","subjectName":"","title":"","type":0,"typeName":"","updateName":"","updateTime":"","videoCoverImage":""}]
+     * limit : 0
+     * nextPage : 0
+     * offset : 0
+     * pageNo : 0
+     * prePage : 0
+     * rows : [{"attribute1":"","attribute2":"","background":"","clientType":"","content":"","coverImage":"","createTime":"","delFlag":true,"hrefTarget":"","id":0,"linkType":"","linkUrl":"","memo":"","offlineTime":"","onlineTime":"","order":0,"showTime":0,"status":"","subType":0,"subTypeName":"","subjectIdList":"","subjectName":"","title":"","type":0,"typeName":"","updateName":"","updateTime":"","videoCoverImage":""}]
+     * statInfo : {}
+     * total : 0
+     * totalPage : 0
+     */
+
+    public int limit;
+    public int nextPage;
+    public int offset;
+    public int pageNo;
+    public int prePage;
+    public StatInfoBean statInfo;
+    public int total;
+    public int totalPage;
+    public ArrayList<FooterBean> footer;
+    public ArrayList<RowsBean> rows;
+
+    public static class StatInfoBean {
+    }
+
+    public static class FooterBean {
+        /**
+         * attribute1 :
+         * attribute2 :
+         * background :
+         * clientType :
+         * content :
+         * coverImage :
+         * createTime :
+         * delFlag : true
+         * hrefTarget :
+         * id : 0
+         * linkType :
+         * linkUrl :
+         * memo :
+         * offlineTime :
+         * onlineTime :
+         * order : 0
+         * showTime : 0
+         * status :
+         * subType : 0
+         * subTypeName :
+         * subjectIdList :
+         * subjectName :
+         * title :
+         * type : 0
+         * typeName :
+         * updateName :
+         * updateTime :
+         * videoCoverImage :
+         */
+
+        public String attribute1;
+        public String attribute2;
+        public String background;
+        public String clientType;
+        public String content;
+        public String coverImage;
+        public String createTime;
+        public boolean delFlag;
+        public String hrefTarget;
+        public int id;
+        public String linkType;
+        public String linkUrl;
+        public String memo;
+        public String offlineTime;
+        public String onlineTime;
+        public int order;
+        public int showTime;
+        public String status;
+        public int subType;
+        public String subTypeName;
+        public String subjectIdList;
+        public String subjectName;
+        public String title;
+        public int type;
+        public String typeName;
+        public String updateName;
+        public String updateTime;
+        public String videoCoverImage;
+    }
+
+    public static class RowsBean {
+        /**
+         * attribute1 :
+         * attribute2 :
+         * background :
+         * clientType :
+         * content :
+         * coverImage :
+         * createTime :
+         * delFlag : true
+         * hrefTarget :
+         * id : 0
+         * linkType :
+         * linkUrl :
+         * memo :
+         * offlineTime :
+         * onlineTime :
+         * order : 0
+         * showTime : 0
+         * status :
+         * subType : 0
+         * subTypeName :
+         * subjectIdList :
+         * subjectName :
+         * title :
+         * type : 0
+         * typeName :
+         * updateName :
+         * updateTime :
+         * videoCoverImage :
+         */
+
+        public String attribute1;
+        public String attribute2;
+        public String background;
+        public String clientType;
+        public String content;
+        public String coverImage;
+        public String createTime;
+        public boolean delFlag;
+        public String hrefTarget;
+        public int id;
+        public String linkType;
+        public String linkUrl;
+        public String memo;
+        public String offlineTime;
+        public String onlineTime;
+        public int order;
+        public int showTime;
+        public String status;
+        public int subType;
+        public String subTypeName;
+        public String subjectIdList;
+        public String subjectName;
+        public String title;
+        public int type;
+        public String typeName;
+        public String updateName;
+        public String updateTime;
+        public String videoCoverImage;
+    }
+}

+ 6 - 1
student/src/main/java/com/cooleshow/student/contract/HomeContract.java

@@ -5,6 +5,7 @@ import com.cooleshow.student.bean.AppHomeBean;
 import com.cooleshow.student.bean.CountOfUnreadBean;
 import com.cooleshow.student.bean.HelpCenterContentBean;
 import com.cooleshow.student.bean.HomeHotMusicSheetBean;
+import com.cooleshow.student.bean.HomeHotNewsBean;
 import com.cooleshow.student.bean.HomeLiveAndVideoBean;
 import com.cooleshow.student.bean.HomeStyleBean;
 import com.cooleshow.student.bean.HotAlbumBean;
@@ -29,7 +30,7 @@ public interface HomeContract {
 
         void queryLiveAndVideoSuccess(HomeLiveAndVideoBean data);
 
-        void getStylePageSuccess(HomeStyleBean data);
+        void getStylePageSuccess(int page, HomeStyleBean data);
 
         void queryUserInfoSuccess(StudentUserInfo data);
 
@@ -40,6 +41,10 @@ public interface HomeContract {
         void getHotMusicSheetListSuccess(HomeHotMusicSheetBean homeHotMusicSheetBean);
 
         void getRecommendTalentSuccess(ArrayList<RecommendTalentListBean> talentListBeans);
+
+        void getHotNewsSuccess(int page, HomeHotNewsBean homeHotNewsBean);
+
+        void getHotNewsError(int page);
     }
 
     interface Presenter {

+ 46 - 5
student/src/main/java/com/cooleshow/student/presenter/main/HomePresenter.java

@@ -13,6 +13,7 @@ import com.cooleshow.student.bean.AppHomeBean;
 import com.cooleshow.student.bean.CountOfUnreadBean;
 import com.cooleshow.student.bean.HelpCenterContentBean;
 import com.cooleshow.student.bean.HomeHotMusicSheetBean;
+import com.cooleshow.student.bean.HomeHotNewsBean;
 import com.cooleshow.student.bean.HomeLiveAndVideoBean;
 import com.cooleshow.student.bean.HomeStyleBean;
 import com.cooleshow.student.bean.HotAlbumBean;
@@ -168,7 +169,7 @@ public class HomePresenter extends BasePresenter<HomeContract.HomeView> implemen
             @Override
             protected void onSuccess(HomeStyleBean data) {
                 if (getView() != null) {
-                    getView().getStylePageSuccess(data);
+                    getView().getStylePageSuccess(1, data);
                 }
             }
 
@@ -185,13 +186,52 @@ public class HomePresenter extends BasePresenter<HomeContract.HomeView> implemen
         });
     }
 
+    /**
+     * 获取热门资讯
+     * @param page
+     */
+    public void getHotNewsPage(int page) {
 
-    public void getTalentStyle() {
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("platformType", "STUDENT");
+            jsonObject.putOpt("type", "1");
+            jsonObject.putOpt("status", "1");
+            jsonObject.putOpt("page", page);
+            jsonObject.putOpt("rows", Constants.DEFAULT_DATA_SIZE);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        addSubscribe(create(APIService.class).getHotNewsPage(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<HomeHotNewsBean>(getView()) {
+            @Override
+            protected void onSuccess(HomeHotNewsBean data) {
+                if (getView() != null) {
+                    getView().getHotNewsSuccess(page, data);
+                }
+            }
+
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+                if (getView() != null) {
+                    getView().getHotNewsError(page);
+                }
+            }
+        });
+    }
+
+
+    /**
+     * 获取达人风采
+     * @param page
+     */
+    public void getTalentStyle(int page) {
         JSONObject jsonObject = new JSONObject();
         try {
             jsonObject.putOpt("platform", "android");
             jsonObject.putOpt("version", "1");
-            jsonObject.putOpt("page", 1);
+            jsonObject.putOpt("page", page);
             jsonObject.putOpt("rows", Constants.DEFAULT_DATA_SIZE);
         } catch (JSONException e) {
             e.printStackTrace();
@@ -205,7 +245,8 @@ public class HomePresenter extends BasePresenter<HomeContract.HomeView> implemen
                     @Override
                     public BaseResponse<HomeStyleBean> apply(BaseResponse<HomeStyleBean> homeStyleBeanBaseResponse) throws Throwable {
                         Log.i("pq", "匹配直播线程:" + Thread.currentThread().getName());
-                        if (arrayListBaseResponse != null) {
+                        if (arrayListBaseResponse != null && page == 1) {
+                            //只有第一页合并添加数据
                             ArrayList<TempLiveTeacherListBean> data = arrayListBaseResponse.getData();
                             if (homeStyleBeanBaseResponse != null && homeStyleBeanBaseResponse.getData() != null) {
                                 List<HomeStyleBean.RowsBean> rows = homeStyleBeanBaseResponse.getData().rows;
@@ -265,7 +306,7 @@ public class HomePresenter extends BasePresenter<HomeContract.HomeView> implemen
                             @Override
                             public void onNext(@NonNull BaseResponse<HomeStyleBean> homeStyleBeanBaseResponse) {
                                 if (getView() != null && homeStyleBeanBaseResponse != null) {
-                                    getView().getStylePageSuccess(homeStyleBeanBaseResponse.getData());
+                                    getView().getStylePageSuccess(page, homeStyleBeanBaseResponse.getData());
                                 }
                             }
 

+ 12 - 1
student/src/main/java/com/cooleshow/student/ui/main/HomeFragment.java

@@ -45,6 +45,7 @@ import com.cooleshow.student.bean.AppHomeBean;
 import com.cooleshow.student.bean.CountOfUnreadBean;
 import com.cooleshow.student.bean.HelpCenterContentBean;
 import com.cooleshow.student.bean.HomeHotMusicSheetBean;
+import com.cooleshow.student.bean.HomeHotNewsBean;
 import com.cooleshow.student.bean.HomeLiveAndVideoBean;
 import com.cooleshow.student.bean.HomeStyleBean;
 import com.cooleshow.student.bean.HotAlbumBean;
@@ -320,7 +321,7 @@ public class HomeFragment extends BaseMVPFragment<FragmentHomeLayoutBinding, Hom
     }
 
     @Override
-    public void getStylePageSuccess(HomeStyleBean data) {
+    public void getStylePageSuccess(int page,HomeStyleBean data) {
         if (null == data.rows || data.rows.size() == 0) {
             mViewBinding.clTeacherStyle.setVisibility(View.GONE);
             return;
@@ -629,4 +630,14 @@ public class HomeFragment extends BaseMVPFragment<FragmentHomeLayoutBinding, Hom
     public void getRecommendTalentSuccess(ArrayList<RecommendTalentListBean> talentListBeans) {
 
     }
+
+    @Override
+    public void getHotNewsSuccess(int page, HomeHotNewsBean homeHotNewsBean) {
+
+    }
+
+    @Override
+    public void getHotNewsError(int page) {
+
+    }
 }

+ 76 - 4
student/src/main/java/com/cooleshow/student/ui/main/HotNewsFragment.java

@@ -7,12 +7,16 @@ import android.view.View;
 import com.alibaba.android.arouter.launcher.ARouter;
 import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.chad.library.adapter.base.listener.OnItemClickListener;
+import com.chad.library.adapter.base.listener.OnLoadMoreListener;
 import com.cooleshow.base.common.WebConstants;
+import com.cooleshow.base.constanst.Constants;
 import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.fragment.BaseFragment;
 import com.cooleshow.base.utils.SizeUtils;
+import com.cooleshow.base.widgets.EmptyViewLayout;
 import com.cooleshow.student.adapter.HomeHotNewsAdapter;
 import com.cooleshow.student.bean.AppHomeBean;
+import com.cooleshow.student.bean.HomeHotNewsBean;
 import com.cooleshow.student.databinding.FragmentHomeHotNewsLayoutBinding;
 
 import java.util.List;
@@ -27,7 +31,9 @@ import androidx.recyclerview.widget.RecyclerView;
 public class HotNewsFragment extends BaseFragment<FragmentHomeHotNewsLayoutBinding> {
 
     private HomeHotNewsAdapter mHomeHotNewsAdapter;
-    private List<AppHomeBean.ItemBean> datas;
+    private OnEventListener onEventListener;
+    private boolean hasNext = true;
+    private int currentPage = 1;
 
     @Override
     protected FragmentHomeHotNewsLayoutBinding getLayoutView() {
@@ -55,7 +61,7 @@ public class HotNewsFragment extends BaseFragment<FragmentHomeHotNewsLayoutBindi
             @Override
             public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
                 if (position < mHomeHotNewsAdapter.getData().size()) {
-                    AppHomeBean.ItemBean item = mHomeHotNewsAdapter.getData().get(position);
+                    HomeHotNewsBean.RowsBean item = mHomeHotNewsAdapter.getData().get(position);
                     ARouter.getInstance()
                             .build(RouterPath.WebCenter.ACTIVITY_HTML)
                             .withString(WebConstants.WEB_URL, WebConstants.STUDENT_SPECIAL_DETAIL + item.id)
@@ -63,6 +69,18 @@ public class HotNewsFragment extends BaseFragment<FragmentHomeHotNewsLayoutBindi
                 }
             }
         });
+        mHomeHotNewsAdapter.getLoadMoreModule().setOnLoadMoreListener(new OnLoadMoreListener() {
+            @Override
+            public void onLoadMore() {
+                //上拉加载
+                if (hasNext) {
+                    currentPage++;
+                    queryMoreData();
+                } else {
+                    mHomeHotNewsAdapter.getLoadMoreModule().loadMoreEnd();
+                }
+            }
+        });
     }
 
     @Override
@@ -70,16 +88,70 @@ public class HotNewsFragment extends BaseFragment<FragmentHomeHotNewsLayoutBindi
 
     }
 
-    public void setData(List<AppHomeBean.ItemBean> itemBeans) {
+    private void queryMoreData() {
+        if (onEventListener != null) {
+            onEventListener.getNewsData(currentPage);
+        }
+    }
+
+    public void refresh() {
+        if (onEventListener != null) {
+            currentPage = 1;
+            onEventListener.getNewsData(currentPage);
+        }
+    }
+
+    public void setData(int page, HomeHotNewsBean data) {
         if (getAdapter() != null) {
-            mHomeHotNewsAdapter.setNewInstance(itemBeans);
+            if (page == 1) {
+                mHomeHotNewsAdapter.getData().clear();
+                mHomeHotNewsAdapter.notifyDataSetChanged();
+                if (data.rows != null && data.rows.size() > 0) {
+                    checkHasNext(data.rows.size());
+                    mHomeHotNewsAdapter.setNewInstance(data.rows);
+                } else {
+                    //showEmpty
+                }
+            } else {
+                if (data.rows != null && data.rows.size() > 0) {
+                    mHomeHotNewsAdapter.getLoadMoreModule().loadMoreComplete();
+                    checkHasNext(data.rows.size());
+                    mHomeHotNewsAdapter.addData(data.rows);
+                } else {
+                    mHomeHotNewsAdapter.getLoadMoreModule().loadMoreEnd();
+                }
+            }
+        }
+    }
+
+    public void getHotNewsError(int page) {
+        if (page > 1) {
+            if (mHomeHotNewsAdapter != null) {
+                currentPage--;
+                mHomeHotNewsAdapter.getLoadMoreModule().loadMoreFail();
+            }
         }
     }
 
     private HomeHotNewsAdapter getAdapter() {
         if (mHomeHotNewsAdapter == null) {
             mHomeHotNewsAdapter = new HomeHotNewsAdapter();
+            EmptyViewLayout emptyViewLayout = new EmptyViewLayout(getContext());
+            emptyViewLayout.setContent(com.cooleshow.base.R.drawable.icon_empty_content, "暂无内容");
+            mHomeHotNewsAdapter.setEmptyView(emptyViewLayout);
         }
         return mHomeHotNewsAdapter;
     }
+
+    public void setOnEventListener(OnEventListener onEventListener) {
+        this.onEventListener = onEventListener;
+    }
+
+    public interface OnEventListener {
+        void getNewsData(int page);
+    }
+
+    private void checkHasNext(int dataSize) {
+        hasNext = dataSize >= Constants.DEFAULT_DATA_SIZE;
+    }
 }

+ 52 - 14
student/src/main/java/com/cooleshow/student/ui/main/NewHomeFragment.java

@@ -34,6 +34,7 @@ import com.cooleshow.student.bean.CountOfUnreadBean;
 import com.cooleshow.student.bean.HelpCenterContentBean;
 import com.cooleshow.student.bean.HomeHotMusicSheetBean;
 import com.cooleshow.student.bean.HomeHotMusicSheetItemBean;
+import com.cooleshow.student.bean.HomeHotNewsBean;
 import com.cooleshow.student.bean.HomeLiveAndVideoBean;
 import com.cooleshow.student.bean.HomeStyleBean;
 import com.cooleshow.student.bean.HotAlbumBean;
@@ -74,7 +75,7 @@ import static com.cooleshow.student.constants.CourseConstants.PIANO_ROOM_COURSE;
 /**
  * Author by pq, Date on 2022/8/29.
  */
-public class NewHomeFragment extends BaseMVPFragment<FragmentNewHomeLayoutBinding, HomePresenter> implements HomeContract.HomeView, View.OnClickListener {
+public class NewHomeFragment extends BaseMVPFragment<FragmentNewHomeLayoutBinding, HomePresenter> implements HomeContract.HomeView, View.OnClickListener, TalentStyleFragment.OnEventListener, HotNewsFragment.OnEventListener {
     public static final int MAX_HOT_MUSIC_LIST_PAGE = 3;//热门曲目一页最大条数
     private Banner banner;
     private SmartRefreshLayout refreshLayout;
@@ -174,7 +175,9 @@ public class NewHomeFragment extends BaseMVPFragment<FragmentNewHomeLayoutBindin
 
         ArrayList<Fragment> bottomFragments = new ArrayList<>();
         mTalentStyleFragment = new TalentStyleFragment();
+        mTalentStyleFragment.setOnEventListener(NewHomeFragment.this);
         mHotNewsFragment = new HotNewsFragment();
+        mHotNewsFragment.setOnEventListener(NewHomeFragment.this);
         bottomFragments.add(mTalentStyleFragment);
         bottomFragments.add(mHotNewsFragment);
         HomeBottomPageAdapter homeBottomPageAdapter = new HomeBottomPageAdapter(this.getChildFragmentManager(), bottomFragments);
@@ -245,8 +248,8 @@ public class NewHomeFragment extends BaseMVPFragment<FragmentNewHomeLayoutBindin
             presenter.appHome();
             presenter.userAccountPage();
             presenter.getHotMusicSheetList();
-            presenter.getTalentStyle();
             presenter.getRecommendTalentList();
+            refreshBottomData();
         });
 
         mHomeVideoCourseAdapter.setOnItemClickListener((adapter, view, position) -> {
@@ -358,13 +361,21 @@ public class NewHomeFragment extends BaseMVPFragment<FragmentNewHomeLayoutBindin
             presenter.appHome();
             //获取课程信息
             presenter.queryLiveAndVideo();
-            //获取达人风采
-            presenter.getTalentStyle();
+            refreshBottomData();
             //获取推荐达人列表
             presenter.getRecommendTalentList();
         }
     }
 
+    private void refreshBottomData() {
+        if (mTalentStyleFragment != null) {
+            mTalentStyleFragment.refresh();
+        }
+        if (mHotNewsFragment != null) {
+            mHotNewsFragment.refresh();
+        }
+    }
+
     @Override
     public void appHomeSuccess(AppHomeBean appHomeBean) {
         if (isDetached()) {
@@ -377,14 +388,6 @@ public class NewHomeFragment extends BaseMVPFragment<FragmentNewHomeLayoutBindin
         bindBanner(appHomeBean.banner);
         //后台配置menu
         initMenu(appHomeBean.appMenu);
-        //热门资讯
-        bindHotNews(appHomeBean.information);
-    }
-
-    private void bindHotNews(List<AppHomeBean.ItemBean> information) {
-        if (mHotNewsFragment != null) {
-            mHotNewsFragment.setData(information);
-        }
     }
 
     /**
@@ -517,9 +520,9 @@ public class NewHomeFragment extends BaseMVPFragment<FragmentNewHomeLayoutBindin
     }
 
     @Override
-    public void getStylePageSuccess(HomeStyleBean data) {
+    public void getStylePageSuccess(int page, HomeStyleBean data) {
         if (mTalentStyleFragment != null) {
-            mTalentStyleFragment.setData(data);
+            mTalentStyleFragment.setData(page, data);
         }
     }
 
@@ -612,6 +615,26 @@ public class NewHomeFragment extends BaseMVPFragment<FragmentNewHomeLayoutBindin
     }
 
     @Override
+    public void getHotNewsSuccess(int page, HomeHotNewsBean homeHotNewsBean) {
+        //获取热门资讯Success
+        bindHotNews(page, homeHotNewsBean);
+    }
+
+    private void bindHotNews(int page, HomeHotNewsBean information) {
+        if (mHotNewsFragment != null) {
+            mHotNewsFragment.setData(page, information);
+        }
+    }
+
+    @Override
+    public void getHotNewsError(int page) {
+        //获取热门资讯Error
+        if (mHotNewsFragment != null) {
+            mHotNewsFragment.getHotNewsError(page);
+        }
+    }
+
+    @Override
     public void onClick(View v) {
         int id = v.getId();
 
@@ -796,4 +819,19 @@ public class NewHomeFragment extends BaseMVPFragment<FragmentNewHomeLayoutBindin
             bottomTabValueAnimator = null;
         }
     }
+
+    //获取达人风采列表
+    @Override
+    public void getStyleData(int page) {
+        if (presenter != null) {
+            presenter.getTalentStyle(page);
+        }
+    }
+
+    @Override
+    public void getNewsData(int page) {
+        if (presenter != null) {
+            presenter.getHotNewsPage(page);
+        }
+    }
 }

+ 63 - 4
student/src/main/java/com/cooleshow/student/ui/main/TalentStyleFragment.java

@@ -6,10 +6,13 @@ import android.view.View;
 import com.alibaba.android.arouter.launcher.ARouter;
 import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.chad.library.adapter.base.listener.OnItemClickListener;
+import com.chad.library.adapter.base.listener.OnLoadMoreListener;
 import com.cooleshow.base.common.WebConstants;
 import com.cooleshow.base.constanst.Constants;
 import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.fragment.BaseFragment;
+import com.cooleshow.base.widgets.EmptyViewLayout;
+import com.cooleshow.student.R;
 import com.cooleshow.student.adapter.HomeTalentStyleAdapter;
 import com.cooleshow.student.bean.HomeStyleBean;
 import com.cooleshow.student.databinding.FragmentHomeTalentLayoutBinding;
@@ -28,6 +31,9 @@ import androidx.recyclerview.widget.StaggeredGridLayoutManager;
 public class TalentStyleFragment extends BaseFragment<FragmentHomeTalentLayoutBinding> {
     RecyclerView recyclerView;
     private HomeTalentStyleAdapter mTalentStyleAdapter;
+    private boolean hasNext = true;
+    private int currentPage = 1;
+    private OnEventListener onEventListener;
 
     @Override
     protected FragmentHomeTalentLayoutBinding getLayoutView() {
@@ -44,6 +50,9 @@ public class TalentStyleFragment extends BaseFragment<FragmentHomeTalentLayoutBi
         StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
         recyclerView.setLayoutManager(staggeredGridLayoutManager);
         mTalentStyleAdapter = new HomeTalentStyleAdapter();
+        EmptyViewLayout emptyViewLayout = new EmptyViewLayout(getContext());
+        emptyViewLayout.setContent(com.cooleshow.base.R.drawable.icon_empty_content, "暂无内容");
+        mTalentStyleAdapter.setEmptyView(emptyViewLayout);
         recyclerView.setAdapter(mTalentStyleAdapter);
         mTalentStyleAdapter.setOnItemClickListener(new OnItemClickListener() {
             @Override
@@ -61,15 +70,65 @@ public class TalentStyleFragment extends BaseFragment<FragmentHomeTalentLayoutBi
                 }
             }
         });
+        mTalentStyleAdapter.getLoadMoreModule().setOnLoadMoreListener(new OnLoadMoreListener() {
+            @Override
+            public void onLoadMore() {
+                //上拉加载
+                if (hasNext) {
+                    currentPage++;
+                    queryMoreData();
+                } else {
+                    mTalentStyleAdapter.getLoadMoreModule().loadMoreEnd();
+                }
+            }
+        });
+    }
+
+    public void refresh() {
+        if (onEventListener != null) {
+            currentPage = 1;
+            onEventListener.getStyleData(currentPage);
+        }
+    }
+
+    private void queryMoreData() {
+        if (onEventListener != null) {
+            onEventListener.getStyleData(currentPage);
+        }
     }
 
-    public void setData(HomeStyleBean data) {
+    public void setData(int page, HomeStyleBean data) {
         if (mTalentStyleAdapter != null) {
-            if (data != null && data.rows != null && data.rows.size() > 0) {
-                mTalentStyleAdapter.setNewInstance(data.rows);
+            if (page == 1) {
+                mTalentStyleAdapter.getData().clear();
+                mTalentStyleAdapter.notifyDataSetChanged();
+                if (data.rows != null && data.rows.size() > 0) {
+                    checkHasNext(data.rows.size());
+                    mTalentStyleAdapter.setNewInstance(data.rows);
+                } else {
+                    //showEmpty
+                }
             } else {
-                //showEmpty
+                if (data.rows != null && data.rows.size() > 0) {
+                    mTalentStyleAdapter.getLoadMoreModule().loadMoreComplete();
+                    checkHasNext(data.rows.size());
+                    mTalentStyleAdapter.addData(data.rows);
+                } else {
+                    mTalentStyleAdapter.getLoadMoreModule().loadMoreEnd();
+                }
             }
         }
     }
+
+    private void checkHasNext(int dataSize) {
+        hasNext = dataSize >= Constants.DEFAULT_DATA_SIZE;
+    }
+
+    public void setOnEventListener(OnEventListener onEventListener) {
+        this.onEventListener = onEventListener;
+    }
+
+    public interface OnEventListener {
+        void getStyleData(int page);
+    }
 }

+ 1 - 0
student/src/main/res/layout/item_home_hot_news.xml

@@ -36,6 +36,7 @@
         tools:text="多地真题盘点一起看多地真题盘点一起看多地真题盘点一起看多地真题盘点一起看多地真题盘点一起看多地真题盘点一起看多地真题盘点一起看多地真题盘点一起看多地真题盘点一起看多地真题盘点一起看多地真题盘点一起看多地真题盘点一起看多地真题盘点一起看多地真题盘点一起看!" />
 
     <TextView
+        android:visibility="gone"
         android:id="@+id/tv_des"
         android:layout_width="0dp"
         android:layout_height="wrap_content"