Ver código fonte

增加老师端我的课程趣纠课课程组列表页面

Pq 3 meses atrás
pai
commit
608293cf0e

+ 1 - 2
teacher/src/main/java/com/cooleshow/teacher/contract/VipCourseContract.java → teacher/src/main/java/com/cooleshow/teacher/contract/InterestCourseGroupContract.java

@@ -1,13 +1,12 @@
 package com.cooleshow.teacher.contract;
 
 import com.cooleshow.base.presenter.view.BaseView;
-import com.cooleshow.teacher.bean.LiveCourseListBean;
 import com.cooleshow.teacher.bean.VIPCourseGroupListBean;
 
 /**
  * Author by pq, Date on 2022/4/20.
  */
-public interface VipCourseContract {
+public interface InterestCourseGroupContract {
 
     interface View extends BaseView {
         void onGetCourseGroupSuccess(int page, VIPCourseGroupListBean data);

+ 21 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/VipCourseGroupContract.java

@@ -0,0 +1,21 @@
+package com.cooleshow.teacher.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.teacher.bean.VIPCourseGroupListBean;
+
+/**
+ * Author by pq, Date on 2022/4/20.
+ */
+public interface VipCourseGroupContract {
+
+    interface View extends BaseView {
+        void onGetCourseGroupSuccess(int page, VIPCourseGroupListBean data);
+
+        void onGetCourseGroupError(int page);
+
+
+    }
+
+    interface Presenter {
+    }
+}

+ 59 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/course/InterestCourseGroupPresenter.java

@@ -0,0 +1,59 @@
+package com.cooleshow.teacher.presenter.course;
+
+import android.text.TextUtils;
+
+import com.cooleshow.base.constanst.Constants;
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.base.utils.RequestBodyUtil;
+import com.cooleshow.teacher.api.APIService;
+import com.cooleshow.teacher.bean.VIPCourseGroupListBean;
+import com.cooleshow.teacher.contract.InterestCourseGroupContract;
+import com.cooleshow.teacher.contract.VipCourseGroupContract;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * 陪练课presenter
+ * Author by pq, Date on 2022/4/20.
+ */
+public class InterestCourseGroupPresenter extends BasePresenter<InterestCourseGroupContract.View> implements InterestCourseGroupContract.Presenter {
+
+    public void queryInterestCourseGroup(boolean isShowLoading, String status, String subjectId, String search, int page) {
+        if (isShowLoading && getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            if (!TextUtils.isEmpty(status)) {
+                jsonObject.putOpt("status", status);
+            }
+            if (!TextUtils.isEmpty(subjectId)) {
+                jsonObject.putOpt("subjectId", subjectId);
+            }
+            jsonObject.putOpt("search", search);
+            jsonObject.putOpt("courseType", Constants.INTEREST_COURSE_TAG);
+            jsonObject.putOpt("page", page);
+            jsonObject.putOpt("rows", Constants.DEFAULT_DATA_SIZE);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        addSubscribe(create(APIService.class).getCourseGroup(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<VIPCourseGroupListBean>(getView()) {
+            @Override
+            protected void onSuccess(VIPCourseGroupListBean data) {
+                if (getView() != null) {
+                    getView().onGetCourseGroupSuccess(page, data);
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+                if (getView() != null) {
+                    getView().onGetCourseGroupError(page);
+                }
+            }
+        });
+    }
+}

+ 3 - 5
teacher/src/main/java/com/cooleshow/teacher/presenter/course/VipCoursePresenter.java → teacher/src/main/java/com/cooleshow/teacher/presenter/course/VipCourseGroupPresenter.java

@@ -7,10 +7,8 @@ import com.cooleshow.base.presenter.BasePresenter;
 import com.cooleshow.base.rx.BaseObserver;
 import com.cooleshow.base.utils.RequestBodyUtil;
 import com.cooleshow.teacher.api.APIService;
-import com.cooleshow.teacher.bean.LiveCourseListBean;
 import com.cooleshow.teacher.bean.VIPCourseGroupListBean;
-import com.cooleshow.teacher.contract.LiveCourseContract;
-import com.cooleshow.teacher.contract.VipCourseContract;
+import com.cooleshow.teacher.contract.VipCourseGroupContract;
 
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -19,9 +17,9 @@ import org.json.JSONObject;
  * 陪练课presenter
  * Author by pq, Date on 2022/4/20.
  */
-public class VipCoursePresenter extends BasePresenter<VipCourseContract.View> implements VipCourseContract.Presenter {
+public class VipCourseGroupPresenter extends BasePresenter<VipCourseGroupContract.View> implements VipCourseGroupContract.Presenter {
 
-    public void queryVIPCourse(boolean isShowLoading, String status, String subjectId, String search, int page) {
+    public void queryVIPCourseGroup(boolean isShowLoading, String status, String subjectId, String search, int page) {
         if (isShowLoading && getView() != null) {
             getView().showLoading();
         }

+ 250 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/course/InterestCourseGroupFragment.java

@@ -0,0 +1,250 @@
+package com.cooleshow.teacher.ui.course;
+
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.PopupWindow;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.listener.OnItemClickListener;
+import com.cooleshow.base.constanst.Constants;
+import com.cooleshow.base.constanst.CourseGroupStatusType;
+import com.cooleshow.base.interfaces.IFilterViewData;
+import com.cooleshow.base.ui.fragment.BaseMVPFragment;
+import com.cooleshow.base.utils.LOG;
+import com.cooleshow.base.utils.PopupUtil;
+import com.cooleshow.base.utils.UiUtils;
+import com.cooleshow.base.widgets.CourseGroupFilterView;
+import com.cooleshow.base.widgets.EmptyViewLayout;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.adapter.VIPCourseAdapter;
+import com.cooleshow.teacher.bean.QuerySubjectBean;
+import com.cooleshow.teacher.bean.VIPCourseGroupListBean;
+import com.cooleshow.teacher.contract.InterestCourseGroupContract;
+import com.cooleshow.teacher.contract.VipCourseGroupContract;
+import com.cooleshow.teacher.databinding.FgInterestCourseLayoutBinding;
+import com.cooleshow.teacher.presenter.course.InterestCourseGroupPresenter;
+import com.scwang.smart.refresh.footer.ClassicsFooter;
+import com.scwang.smart.refresh.layout.api.RefreshLayout;
+import com.scwang.smart.refresh.layout.listener.OnLoadMoreListener;
+import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+/**
+ * Author by pq, Date on 2022/5/9.
+ * 我的课程-趣纠课课程组
+ */
+public class InterestCourseGroupFragment extends BaseMVPFragment<FgInterestCourseLayoutBinding, InterestCourseGroupPresenter> implements InterestCourseGroupContract.View, View.OnClickListener {
+    private List<IFilterViewData> subjectBeanList = new ArrayList<>();//声部筛选
+    private VIPCourseAdapter mAdapter;
+    private int currentPage = 1;
+    private boolean hasNext = true;
+    private String status = "";
+    private String currentSubjectId;
+    private String searchCondition;
+    private CourseGroupFilterView mCourseGroupFilterView;
+    private PopupWindow mPopupWindow;
+    private List<IFilterViewData> statusList;//状态筛选
+
+    @Override
+    protected void initView(View rootView) {
+        mViewBinding.refreshLayout.setRefreshFooter(new ClassicsFooter(getContext()));
+        LinearLayoutManager manager = new LinearLayoutManager(getContext());
+        mViewBinding.recyclerViewList.setLayoutManager(manager);
+        mAdapter = new VIPCourseAdapter();
+        EmptyViewLayout mEmptyView = new EmptyViewLayout(getContext());
+        mEmptyView.setContent(com.cooleshow.base.R.drawable.icon_empty_course, "暂无课程");
+        mAdapter.setEmptyView(mEmptyView);
+        mViewBinding.recyclerViewList.setAdapter(mAdapter);
+    }
+
+
+    @Override
+    protected void initData() {
+        CourseGroupStatusType[] values = CourseGroupStatusType.values();
+        List<CourseGroupStatusType> courseGroupStatusTypes = Arrays.asList(values);
+        statusList = new ArrayList<IFilterViewData>(courseGroupStatusTypes);
+
+
+        initListener();
+        getData(true);
+    }
+
+    private void initListener() {
+        mViewBinding.tvFilter.setOnClickListener(this);
+        mViewBinding.tvSearch.setOnClickListener(this);
+        mViewBinding.refreshLayout.setOnRefreshListener(new OnRefreshListener() {
+            @Override
+            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
+                currentPage = 1;
+                getData(false);
+            }
+        });
+        mViewBinding.refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
+            @Override
+            public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
+                //上拉加载
+                if (hasNext) {
+                    currentPage++;
+                    getData(false);
+                } else {
+                    mViewBinding.refreshLayout.finishLoadMoreWithNoMoreData();
+                }
+            }
+        });
+
+        mAdapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                //课程详情页
+            }
+        });
+    }
+
+    private void getData(boolean isLoading) {
+        if (currentPage == 1) {
+            mViewBinding.refreshLayout.resetNoMoreData();
+        }
+        presenter.queryInterestCourseGroup(isLoading, status, currentSubjectId, searchCondition, currentPage);
+    }
+
+    @Override
+    protected FgInterestCourseLayoutBinding getLayoutView() {
+        return FgInterestCourseLayoutBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected InterestCourseGroupPresenter createPresenter() {
+        return new InterestCourseGroupPresenter();
+    }
+
+    @Override
+    public void onClick(View view) {
+        int id = view.getId();
+        if (id == R.id.tv_filter) {
+            showFilterView();
+            return;
+        }
+
+        if (id == R.id.tv_search) {
+            currentPage = 1;
+            searchCondition = mViewBinding.etTargetName.getText().toString().trim();
+            getData(false);
+            return;
+        }
+    }
+
+
+    private void showFilterView() {
+        if (mCourseGroupFilterView == null) {
+            mCourseGroupFilterView = new CourseGroupFilterView(getContext());
+            mCourseGroupFilterView.setOnEventListener(new CourseGroupFilterView.OnEventListener() {
+                @Override
+                public void onDismiss() {
+                    if (mPopupWindow != null) {
+                        mPopupWindow.dismiss();
+                    }
+                }
+
+                @Override
+                public void onQuery(String obj, String obj2) {
+                    if (mPopupWindow != null) {
+                        mPopupWindow.dismiss();
+                    }
+                    currentPage = 1;
+                    InterestCourseGroupFragment.this.status = obj;
+                    InterestCourseGroupFragment.this.currentSubjectId = obj2;
+                    getData(true);
+                }
+            });
+        }
+        mCourseGroupFilterView.setData(statusList, subjectBeanList);
+        ViewGroup parent = (ViewGroup) mCourseGroupFilterView.getParent();
+        if (parent != null) {
+            parent.removeView(mCourseGroupFilterView);
+        }
+        mPopupWindow = PopupUtil.showInDropWrapNObg(getContext(), mCourseGroupFilterView, mViewBinding.viewTopLine, new PopupUtil.ShowListener() {
+            @Override
+            public void onShow(View view, PopupWindow popupWindow) {
+                UiUtils.refreshFilterTextStyle(true, mViewBinding.tvFilter);
+            }
+        });
+        mPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
+            @Override
+            public void onDismiss() {
+                UiUtils.refreshFilterTextStyle(false, mViewBinding.tvFilter);
+            }
+        });
+    }
+
+
+    @Override
+    public void onResume() {
+        super.onResume();
+    }
+
+
+    private void checkHasNext(int dataSize) {
+        hasNext = dataSize >= Constants.DEFAULT_DATA_SIZE;
+        mViewBinding.refreshLayout.setNoMoreData(!hasNext);
+    }
+
+    @Override
+    public void onGetCourseGroupSuccess(int page, VIPCourseGroupListBean dataList) {
+        if (isDetached()) {
+            return;
+        }
+        LOG.i("pq", "onGetCourseGroupSuccess:" + dataList);
+        if (dataList != null) {
+            if (page == 1) {
+                //第一页
+                mViewBinding.refreshLayout.finishRefresh();
+                if (mAdapter != null) {
+                    mAdapter.getData().clear();
+                    mAdapter.notifyDataSetChanged();
+                    if (dataList.getRows() != null && dataList.getRows().size() > 0) {
+                        checkHasNext(dataList.getRows().size());
+                        mAdapter.setNewInstance(dataList.getRows());
+                    }
+                }
+            } else {
+                //加载更多
+                if (mAdapter != null) {
+                    if (dataList.getRows() != null && dataList.getRows().size() > 0) {
+                        mViewBinding.refreshLayout.finishLoadMore();
+                        checkHasNext(dataList.getRows().size());
+                        mAdapter.addData(dataList.getRows());
+                    } else {
+                        mViewBinding.refreshLayout.finishLoadMoreWithNoMoreData();
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public void onGetCourseGroupError(int page) {
+        if (isDetached()) {
+            return;
+        }
+        if (page == 1) {
+            mViewBinding.refreshLayout.finishRefresh();
+        } else {
+            if (mAdapter != null) {
+                currentPage--;
+                mViewBinding.refreshLayout.finishLoadMore(false);
+            }
+        }
+    }
+
+    public void querySubjectItemSuccess(List<QuerySubjectBean> data) {
+        subjectBeanList.clear();
+        subjectBeanList.add(new QuerySubjectBean("全部", 0));
+        subjectBeanList.addAll(data);
+    }
+}

+ 5 - 5
teacher/src/main/java/com/cooleshow/teacher/ui/course/MineCourseActivity.java

@@ -38,11 +38,11 @@ public class MineCourseActivity extends BaseMVPActivity<ActivityMineCourseLayout
     public static final String SELECT_POSITION = "selectPosition";
     private List<String> titles = new ArrayList<String>(Arrays.asList("VIP定制课","趣纠课", "直播课", "视频课", "琴房课"));
     private ArrayList<Fragment> mFragments = new ArrayList<>();
-    private SparringCourseFragment mSparringCourseFragment;
     private LiveCourseFragment mLiveCourseFragment;
     private VideoCourseFragment mVideoCourseFragment;
     private PianoRoomCourseFragment mPianoRoomCourseFragment;
     private VIPCourseGroupFragment mVipCourseFragment;
+    private InterestCourseGroupFragment mInterestCourseGroupFragment;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -75,13 +75,13 @@ public class MineCourseActivity extends BaseMVPActivity<ActivityMineCourseLayout
             createTab(tab, titles.get(position));
         });
 
-        mSparringCourseFragment = new SparringCourseFragment();
+        mInterestCourseGroupFragment = new InterestCourseGroupFragment();
         mLiveCourseFragment = new LiveCourseFragment();
         mVideoCourseFragment = new VideoCourseFragment();
         mPianoRoomCourseFragment = new PianoRoomCourseFragment();
         mVipCourseFragment = new VIPCourseGroupFragment();
         mFragments.add(mVipCourseFragment);
-        mFragments.add(mSparringCourseFragment);
+        mFragments.add(mInterestCourseGroupFragment);
         mFragments.add(mLiveCourseFragment);
         mFragments.add(mVideoCourseFragment);
         mFragments.add(mPianoRoomCourseFragment);
@@ -158,8 +158,8 @@ public class MineCourseActivity extends BaseMVPActivity<ActivityMineCourseLayout
         if (mVipCourseFragment != null) {
             mVipCourseFragment.querySubjectItemSuccess(data);
         }
-        if (mSparringCourseFragment != null) {
-            mSparringCourseFragment.querySubjectItemSuccess(data);
+        if (mInterestCourseGroupFragment != null) {
+            mInterestCourseGroupFragment.querySubjectItemSuccess(data);
         }
         if (mLiveCourseFragment != null) {
             mLiveCourseFragment.querySubjectItemSuccess(data);

+ 7 - 6
teacher/src/main/java/com/cooleshow/teacher/ui/course/VIPCourseGroupFragment.java

@@ -19,9 +19,9 @@ import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.adapter.VIPCourseAdapter;
 import com.cooleshow.teacher.bean.QuerySubjectBean;
 import com.cooleshow.teacher.bean.VIPCourseGroupListBean;
-import com.cooleshow.teacher.contract.VipCourseContract;
+import com.cooleshow.teacher.contract.VipCourseGroupContract;
 import com.cooleshow.teacher.databinding.FgVipCourseLayoutBinding;
-import com.cooleshow.teacher.presenter.course.VipCoursePresenter;
+import com.cooleshow.teacher.presenter.course.VipCourseGroupPresenter;
 import com.scwang.smart.refresh.footer.ClassicsFooter;
 import com.scwang.smart.refresh.layout.api.RefreshLayout;
 import com.scwang.smart.refresh.layout.listener.OnLoadMoreListener;
@@ -36,8 +36,9 @@ import androidx.recyclerview.widget.LinearLayoutManager;
 
 /**
  * Author by pq, Date on 2022/5/9.
+ * 我的课程-VIP课课程组
  */
-public class VIPCourseGroupFragment extends BaseMVPFragment<FgVipCourseLayoutBinding, VipCoursePresenter> implements VipCourseContract.View, View.OnClickListener {
+public class VIPCourseGroupFragment extends BaseMVPFragment<FgVipCourseLayoutBinding, VipCourseGroupPresenter> implements VipCourseGroupContract.View, View.OnClickListener {
     private List<IFilterViewData> subjectBeanList = new ArrayList<>();//声部筛选
     private VIPCourseAdapter mAdapter;
     private int currentPage = 1;
@@ -108,7 +109,7 @@ public class VIPCourseGroupFragment extends BaseMVPFragment<FgVipCourseLayoutBin
         if (currentPage == 1) {
             mViewBinding.refreshLayout.resetNoMoreData();
         }
-        presenter.queryVIPCourse(isLoading, status, currentSubjectId, searchCondition, currentPage);
+        presenter.queryVIPCourseGroup(isLoading, status, currentSubjectId, searchCondition, currentPage);
     }
 
     @Override
@@ -117,8 +118,8 @@ public class VIPCourseGroupFragment extends BaseMVPFragment<FgVipCourseLayoutBin
     }
 
     @Override
-    protected VipCoursePresenter createPresenter() {
-        return new VipCoursePresenter();
+    protected VipCourseGroupPresenter createPresenter() {
+        return new VipCourseGroupPresenter();
     }
 
     @Override

+ 112 - 0
teacher/src/main/res/layout/fg_interest_course_layout.xml

@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:paddingTop="10dp"
+    android:layout_height="match_parent">
+
+    <TextView
+        android:id="@+id/tv_filter"
+        android:layout_width="wrap_content"
+        android:layout_height="0dp"
+        android:drawableRight="@drawable/icon_arrow_down"
+        android:drawablePadding="6dp"
+        android:ellipsize="end"
+        android:gravity="center"
+        android:includeFontPadding="false"
+        android:maxLength="6"
+        android:maxLines="1"
+        android:paddingStart="13dp"
+        android:paddingEnd="8dp"
+        android:text="筛选"
+        android:textColor="@color/color_333333"
+        android:textSize="@dimen/sp_14"
+        app:layout_constraintBottom_toBottomOf="@+id/view_search_bg"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="@+id/view_search_bg" />
+
+    <View
+        android:id="@+id/view_search_bg"
+        android:layout_width="0dp"
+        android:layout_height="34dp"
+        android:layout_marginEnd="14dp"
+        android:background="@drawable/bg_white_18dp"
+        app:layout_constraintLeft_toRightOf="@+id/tv_filter"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/iv_search_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="12dp"
+        android:src="@drawable/icon_search"
+        app:layout_constraintBottom_toBottomOf="@+id/view_search_bg"
+        app:layout_constraintLeft_toLeftOf="@+id/view_search_bg"
+        app:layout_constraintTop_toTopOf="@+id/view_search_bg" />
+
+    <com.cooleshow.base.widgets.ClearEditText
+        android:id="@+id/et_target_name"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="5dp"
+        android:background="@null"
+        android:ellipsize="end"
+        android:hint="请输入搜索关键词"
+        android:includeFontPadding="false"
+        android:maxLines="1"
+        android:paddingStart="8dp"
+        android:textColorHint="@color/color_66000000"
+        android:textColor="@color/color_333333"
+        android:textCursorDrawable="@drawable/shape_2dc7aa_1dp"
+        android:textSize="@dimen/sp_14"
+        android:theme="@style/MyEditText"
+        app:layout_constraintBottom_toBottomOf="@+id/view_search_bg"
+        app:layout_constraintLeft_toRightOf="@+id/iv_search_icon"
+        app:layout_constraintRight_toLeftOf="@+id/tv_search"
+        app:layout_constraintTop_toTopOf="@+id/view_search_bg" />
+
+    <TextView
+        android:id="@+id/tv_search"
+        android:layout_width="56dp"
+        android:layout_height="28dp"
+        android:layout_marginEnd="3dp"
+        android:background="@drawable/shape_1ecdac_18dp"
+        android:gravity="center"
+        android:includeFontPadding="false"
+        android:text="搜索"
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_14"
+        app:layout_constraintBottom_toBottomOf="@+id/view_search_bg"
+        app:layout_constraintRight_toRightOf="@+id/view_search_bg"
+        app:layout_constraintTop_toTopOf="@+id/view_search_bg" />
+
+    <View
+        android:layout_marginTop="12dp"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/view_search_bg"
+        android:id="@+id/view_top_line"
+        android:layout_width="match_parent"
+        android:layout_height="1px"/>
+
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/refreshLayout"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/view_top_line"
+        app:srlEnableLoadMore="true">
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/recyclerView_list"
+            android:layout_marginEnd="14dp"
+            android:layout_marginStart="14dp"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:overScrollMode="never"
+            android:scrollbars="none" />
+    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>