Ver Fonte

教师端课程 添加声部选择功能

邓琴文 há 3 anos atrás
pai
commit
b431eb03bd

+ 8 - 1
teacher/src/main/java/com/cooleshow/teacher/api/APIService.java

@@ -22,6 +22,7 @@ import com.cooleshow.teacher.bean.PianoRoomCourseCommentBean;
 import com.cooleshow.teacher.bean.PianoRoomCourseHomeworkBean;
 import com.cooleshow.teacher.bean.PianoRoomCourseInfoBean;
 import com.cooleshow.teacher.bean.PianoRoomCourseListBean;
+import com.cooleshow.teacher.bean.QuerySubjectBean;
 import com.cooleshow.teacher.bean.ReceivedCommentListBean;
 import com.cooleshow.teacher.bean.ResponseBankCardBean;
 import com.cooleshow.teacher.bean.ResponseBindCardBean;
@@ -103,7 +104,13 @@ public interface APIService {
      */
     @POST(TEACHER_GROUP + "courseSchedule/queryTeacherPracticeCourse")
     Observable<BaseResponse<SparringCourseListBean>> getSparringCourses(@Body RequestBody body);
-
+    /**
+     * 获取声部搜索下拉框
+     *
+     * @return
+     */
+    @POST(STUDENT_GROUP + "student/querySubjectItem")
+    Observable<BaseResponse<List<QuerySubjectBean>>> querySubjectItem();
 
     /**
      * 查询琴房课列表

+ 65 - 0
teacher/src/main/java/com/cooleshow/teacher/bean/QuerySubjectBean.java

@@ -0,0 +1,65 @@
+package com.cooleshow.teacher.bean;
+
+import com.contrarywind.interfaces.IPickerViewData;
+
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/30 11:53
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class QuerySubjectBean implements IPickerViewData {
+    /*
+    	"code": "",
+			"createTime": "",
+			"delFlag": true,
+			"desc": "",
+			"id": 0,
+			"img": "",
+			"name": "",
+			"parentSubjectId": 0,
+			"parentSubjectName": "",
+			"subjects": [
+				{
+					"code": "",
+					"createTime": "",
+					"delFlag": true,
+					"desc": "",
+					"id": 0,
+					"img": "",
+					"name": "",
+					"parentSubjectId": 0,
+					"parentSubjectName": "",
+					"subjects": [
+						{}
+					],
+					"updateTime": ""
+				}
+			],
+			"updateTime": ""
+     */
+
+    public QuerySubjectBean(String name, int id) {
+        this.id = id;
+        this.name = name;
+    }
+
+    public String code;
+    public String createTime;
+    public boolean delFlag;
+    public String desc;
+    public int id;
+    public String img;
+    public String name;
+    public int parentSubjectId;
+    public String parentSubjectName;
+    public List<QuerySubjectBean> subjects;
+    public String updateTime;
+
+    @Override
+    public String getPickerViewText() {
+        return name;
+    }
+}

+ 5 - 1
teacher/src/main/java/com/cooleshow/teacher/contract/MineCourseContract.java

@@ -1,6 +1,9 @@
 package com.cooleshow.teacher.contract;
 
 import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.teacher.bean.QuerySubjectBean;
+
+import java.util.List;
 
 /**
  * Author by pq, Date on 2022/4/20.
@@ -8,7 +11,8 @@ import com.cooleshow.base.presenter.view.BaseView;
 public interface MineCourseContract {
 
     interface MineCourseView extends BaseView {
-//        void onLoginResult(UserInfo userInfo);
+        void querySubjectItemSuccess(List<QuerySubjectBean> data);
+
     }
 
     interface Presenter {

+ 20 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/course/MineCoursePresenter.java

@@ -1,12 +1,32 @@
 package com.cooleshow.teacher.presenter.course;
 
 import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.teacher.api.APIService;
+import com.cooleshow.teacher.bean.QuerySubjectBean;
 import com.cooleshow.teacher.contract.HomeContract;
 import com.cooleshow.teacher.contract.MineCourseContract;
 
+import java.util.List;
+
 /**
  * Author by pq, Date on 2022/4/20.
  */
 public class MineCoursePresenter extends BasePresenter<MineCourseContract.MineCourseView> implements MineCourseContract.Presenter {
+    public void querySubjectItem() {
+        addSubscribe(create(APIService.class).querySubjectItem(), new BaseObserver<List<QuerySubjectBean>>(getView()) {
+            @Override
+            protected void onSuccess(List<QuerySubjectBean> data) {
+                if (getView() != null) {
+                    getView().querySubjectItemSuccess(data);
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
 
+            }
+        });
+    }
 }

+ 47 - 44
teacher/src/main/java/com/cooleshow/teacher/ui/course/LiveCourseFragment.java

@@ -20,11 +20,14 @@ import com.cooleshow.base.utils.LogUtils;
 import com.cooleshow.base.utils.PopupUtil;
 import com.cooleshow.base.utils.TimeUtils;
 import com.cooleshow.base.widgets.EmptyViewLayout;
+import com.cooleshow.base.widgets.poplist.PopMenuBean;
+import com.cooleshow.base.widgets.poplist.PopupListWindow;
 import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.adapter.CourseStatusFilterAdapter;
 import com.cooleshow.teacher.adapter.LiveCourseListAdapter;
 import com.cooleshow.teacher.bean.CourseFilterStatusBean;
 import com.cooleshow.teacher.bean.LiveCourseListBean;
+import com.cooleshow.teacher.bean.QuerySubjectBean;
 import com.cooleshow.teacher.constants.CourseConstants;
 import com.cooleshow.teacher.contract.LiveCourseContract;
 import com.cooleshow.teacher.databinding.FragmentLiveCourseLayoutBinding;
@@ -35,6 +38,7 @@ import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.List;
 
 import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.LinearLayoutManager;
@@ -51,12 +55,9 @@ public class LiveCourseFragment extends BaseMVPFragment<FragmentLiveCourseLayout
     private int currentPage;
     private LiveCourseListAdapter mAdapter;
     private EmptyViewLayout mEmptyView;
-    private TextView mTvEmptyTip;
-    private ImageView mEmptyIcon;
     private TimePickerView pvTime;
-    private PopupWindow mPopupWindow;
     private ArrayList<CourseFilterStatusBean> mCourseFilterStatusBeans;
-    private CourseStatusFilterAdapter mCourseStatusFilterAdapter;
+    private List<QuerySubjectBean> subjectBeanList = new ArrayList<>();
     private boolean hasNext = true;
     private boolean isFirstLoad = true;
 
@@ -74,6 +75,7 @@ public class LiveCourseFragment extends BaseMVPFragment<FragmentLiveCourseLayout
     protected void initView(View rootView) {
         mViewBinding.tvTime.setOnClickListener(this);
         mViewBinding.tvCourseStatus.setOnClickListener(this);
+        mViewBinding.tvAgency.setOnClickListener(this);
     }
 
     @Override
@@ -254,45 +256,6 @@ public class LiveCourseFragment extends BaseMVPFragment<FragmentLiveCourseLayout
             pvTime.show();
         }
     }
-
-    private void initPopu(View targetView) {
-        if (mPopupWindow == null) {
-            View popupContentView = LayoutInflater.from(requireContext()).inflate(com.cooleshow.base.R.layout.list_popu_layout, null);
-            RecyclerView recyclerView = popupContentView.findViewById(R.id.recyclerView);
-            View bg = popupContentView.findViewById(com.cooleshow.base.R.id.view);
-            bg.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    if (mPopupWindow != null) {
-                        mPopupWindow.dismiss();
-                    }
-                }
-            });
-            mCourseStatusFilterAdapter = new CourseStatusFilterAdapter(com.cooleshow.base.R.layout.notice_popu_list_item);
-            mCourseStatusFilterAdapter.setOnItemClickListener(new OnItemClickListener() {
-                @Override
-                public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
-                    Object object = mCourseStatusFilterAdapter.getData().get(position);
-                    if (object instanceof CourseFilterStatusBean) {
-                        if (mCourseStatusFilterAdapter != null) {
-                            mCourseStatusFilterAdapter.setSelect(position);
-                        }
-                        CourseFilterStatusBean filterStatusBean = (CourseFilterStatusBean) object;
-                        mViewBinding.tvCourseStatus.setText(filterStatusBean.showText);
-                        reBuildFilter(currentSelectDate, filterStatusBean.value);
-                    }
-                    mPopupWindow.dismiss();
-                }
-            });
-            recyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
-            recyclerView.setAdapter(mCourseStatusFilterAdapter);
-            mCourseStatusFilterAdapter.setNewInstance(mCourseFilterStatusBeans);
-            mPopupWindow = PopupUtil.createNoBackPopupWindow(popupContentView, requireContext(), ViewGroup.LayoutParams.MATCH_PARENT,
-                    ViewGroup.LayoutParams.WRAP_CONTENT, true);
-        }
-        mPopupWindow.showAsDropDown(targetView);
-    }
-
     @Override
     public void onClick(View v) {
         if (v.getId() == R.id.tv_time) {
@@ -303,8 +266,48 @@ public class LiveCourseFragment extends BaseMVPFragment<FragmentLiveCourseLayout
 
         if (v.getId() == R.id.tv_course_status) {
             //课程状态筛选
-            initPopu(mViewBinding.tvCourseStatus);
+            List<PopMenuBean> popList = new ArrayList<>();
+            for (CourseFilterStatusBean bean : mCourseFilterStatusBeans) {
+                PopMenuBean popMenuBean = new PopMenuBean();
+                popMenuBean.setActionName(bean.showText);
+                popList.add(popMenuBean);
+            }
+            initCoursePop(mViewBinding.tvCourseStatus, popList, position -> {
+                CourseFilterStatusBean bean = mCourseFilterStatusBeans.get(position);
+                mViewBinding.tvCourseStatus.setText(bean.showText);
+                reBuildFilter(currentSelectDate, bean.value);
+            });
+            return;
+        }
+        if (v.getId() == R.id.tv_agency) {
+            //选择声部
+            if (subjectBeanList.size() == 0) {
+                subjectBeanList.add(new QuerySubjectBean("全部声部", 0));
+            }
+            List<PopMenuBean> popList = new ArrayList<>();
+            for (QuerySubjectBean bean : subjectBeanList) {
+                PopMenuBean popMenuBean = new PopMenuBean();
+                popMenuBean.setActionName(bean.name);
+                popList.add(popMenuBean);
+            }
+            initCoursePop(mViewBinding.tvAgency, popList, position -> {
+                QuerySubjectBean bean = subjectBeanList.get(position);
+                currentSubjectId = bean.id;
+                mViewBinding.tvAgency.setText(bean.name);
+                queryCourse(true);
+            });
             return;
         }
     }
+
+    private void initCoursePop(View targetView, List<PopMenuBean> popList, PopupListWindow.PopupListListener listener) {
+        PopupListWindow popWindow = new PopupListWindow(getContext());
+        popWindow.showListPop(targetView, popList, position -> listener.onPopupListClick(position));
+    }
+
+    public void querySubjectItemSuccess(List<QuerySubjectBean> data) {
+        subjectBeanList.clear();
+        subjectBeanList.add(new QuerySubjectBean("全部声部", 0));
+        subjectBeanList.addAll(data);
+    }
 }

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

@@ -10,10 +10,15 @@ import com.cooleshow.base.ui.fragment.BaseMVPFragment;
 import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
 import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.adapter.MineCoursePageAdapter;
+import com.cooleshow.teacher.bean.CourseFilterStatusBean;
+import com.cooleshow.teacher.bean.QuerySubjectBean;
+import com.cooleshow.teacher.constants.CourseConstants;
+import com.cooleshow.teacher.contract.MineCourseContract;
 import com.cooleshow.teacher.databinding.ActivityMineCourseLayoutBinding;
 import com.cooleshow.teacher.presenter.course.MineCoursePresenter;
 
 import java.util.ArrayList;
+import java.util.List;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -24,8 +29,12 @@ import androidx.viewpager2.widget.ViewPager2;
  * Author by pq, Date on 2022/4/25.
  */
 @Route(path = RouterPath.CourseCenter.TEACHER_MINE_COURSE)
-public class MineCourseActivity extends BaseMVPActivity<ActivityMineCourseLayoutBinding, MineCoursePresenter> {
+public class MineCourseActivity extends BaseMVPActivity<ActivityMineCourseLayoutBinding, MineCoursePresenter> implements MineCourseContract.MineCourseView {
     private ArrayList<Fragment> mFragments = new ArrayList<>();
+    private SparringCourseFragment mSparringCourseFragment;
+    private LiveCourseFragment mLiveCourseFragment;
+    private VideoCourseFragment mVideoCourseFragment;
+    private PianoRoomCourseFragment mPianoRoomCourseFragment;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -44,16 +53,16 @@ public class MineCourseActivity extends BaseMVPActivity<ActivityMineCourseLayout
         initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "我的课程");
         viewBinding.radioGroup.setOnCheckedChangeListener((radioGroup, i) -> {
                     if (i == R.id.rb_sparring) {
-                        viewBinding.viewPager.setCurrentItem(0,false);
+                        viewBinding.viewPager.setCurrentItem(0, false);
                     }
                     if (i == R.id.rb_live_course) {
-                        viewBinding.viewPager.setCurrentItem(1,false);
+                        viewBinding.viewPager.setCurrentItem(1, false);
                     }
                     if (i == R.id.rb_video_course) {
-                        viewBinding.viewPager.setCurrentItem(2,false);
+                        viewBinding.viewPager.setCurrentItem(2, false);
                     }
                     if (i == R.id.rb_piano_room_course) {
-                        viewBinding.viewPager.setCurrentItem(3,false);
+                        viewBinding.viewPager.setCurrentItem(3, false);
                     }
                 }
         );
@@ -102,23 +111,39 @@ public class MineCourseActivity extends BaseMVPActivity<ActivityMineCourseLayout
     @Override
     public void initData() {
         super.initData();
-        SparringCourseFragment sparringCourseFragment = new SparringCourseFragment();
-        LiveCourseFragment liveCourseFragment = new LiveCourseFragment();
-        VideoCourseFragment videoCourseFragment = new VideoCourseFragment();
-        PianoRoomCourseFragment pianoRoomCourseFragment = new PianoRoomCourseFragment();
-        mFragments.add(sparringCourseFragment);
-        mFragments.add(liveCourseFragment);
-        mFragments.add(videoCourseFragment);
-        mFragments.add(pianoRoomCourseFragment);
+        mSparringCourseFragment = new SparringCourseFragment();
+        mLiveCourseFragment = new LiveCourseFragment();
+        mVideoCourseFragment = new VideoCourseFragment();
+        mPianoRoomCourseFragment = new PianoRoomCourseFragment();
+        mFragments.add(mSparringCourseFragment);
+        mFragments.add(mLiveCourseFragment);
+        mFragments.add(mVideoCourseFragment);
+        mFragments.add(mPianoRoomCourseFragment);
         MineCoursePageAdapter mineCoursePageAdapter = new MineCoursePageAdapter(this);
         mineCoursePageAdapter.setFragments(mFragments);
         viewBinding.viewPager.setAdapter(mineCoursePageAdapter);
         viewBinding.viewPager.setOffscreenPageLimit(mFragments.size());
-
+        presenter.querySubjectItem();
     }
 
     @Override
     protected MineCoursePresenter createPresenter() {
         return new MineCoursePresenter();
     }
+
+    @Override
+    public void querySubjectItemSuccess(List<QuerySubjectBean> data) {
+        if (mSparringCourseFragment != null) {
+            mSparringCourseFragment.querySubjectItemSuccess(data);
+        }
+        if (mLiveCourseFragment != null) {
+            mLiveCourseFragment.querySubjectItemSuccess(data);
+        }
+        if (mVideoCourseFragment != null) {
+            mVideoCourseFragment.querySubjectItemSuccess(data);
+        }
+        if (mPianoRoomCourseFragment != null) {
+            mPianoRoomCourseFragment.querySubjectItemSuccess(data);
+        }
+    }
 }

+ 65 - 69
teacher/src/main/java/com/cooleshow/teacher/ui/course/PianoRoomCourseFragment.java

@@ -22,12 +22,15 @@ import com.cooleshow.base.utils.LogUtils;
 import com.cooleshow.base.utils.PopupUtil;
 import com.cooleshow.base.utils.TimeUtils;
 import com.cooleshow.base.widgets.EmptyViewLayout;
+import com.cooleshow.base.widgets.poplist.PopMenuBean;
+import com.cooleshow.base.widgets.poplist.PopupListWindow;
 import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.adapter.CourseStatusFilterAdapter;
 import com.cooleshow.teacher.adapter.PianoRoomCourseListAdapter;
 import com.cooleshow.teacher.adapter.SparringCourseListAdapter;
 import com.cooleshow.teacher.bean.CourseFilterStatusBean;
 import com.cooleshow.teacher.bean.PianoRoomCourseListBean;
+import com.cooleshow.teacher.bean.QuerySubjectBean;
 import com.cooleshow.teacher.bean.SparringCourseListBean;
 import com.cooleshow.teacher.constants.CourseConstants;
 import com.cooleshow.teacher.contract.PianoRoomCourseContract;
@@ -42,6 +45,7 @@ import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.List;
 
 import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.LinearLayoutManager;
@@ -60,12 +64,9 @@ public class PianoRoomCourseFragment extends BaseMVPFragment<FragmentPianoRoomCo
     private boolean hasNext = true;
     private PianoRoomCourseListAdapter mAdapter;
     private EmptyViewLayout mEmptyView;
-    private TextView mTvEmptyTip;
-    private ImageView mEmptyIcon;
     private TimePickerView pvTime;
-    private PopupWindow mPopupWindow;
     private ArrayList<CourseFilterStatusBean> mCourseFilterStatusBeans;
-    private CourseStatusFilterAdapter mCourseStatusFilterAdapter;
+    private List<QuerySubjectBean> subjectBeanList = new ArrayList<>();
     private boolean isFirstLoad = true;
 
     @Override
@@ -82,6 +83,7 @@ public class PianoRoomCourseFragment extends BaseMVPFragment<FragmentPianoRoomCo
     protected void initView(View rootView) {
         mViewBinding.tvTime.setOnClickListener(this);
         mViewBinding.tvCourseStatus.setOnClickListener(this);
+        mViewBinding.tvAgency.setOnClickListener(this);
     }
 
     @Override
@@ -125,37 +127,28 @@ public class PianoRoomCourseFragment extends BaseMVPFragment<FragmentPianoRoomCo
 
     @Override
     protected void initData() {
-        mViewBinding.refreshLayout.setOnRefreshListener(new OnRefreshListener() {
-            @Override
-            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
-                currentPage = 1;
-                queryCourse(true);
-            }
+        mViewBinding.refreshLayout.setOnRefreshListener(refreshLayout -> {
+            currentPage = 1;
+            queryCourse(true);
         });
 
         mAdapter = new PianoRoomCourseListAdapter(R.layout.item_piano_room_course_list_layout);
-        mAdapter.getLoadMoreModule().setOnLoadMoreListener(new OnLoadMoreListener() {
-            @Override
-            public void onLoadMore() {
-                //上拉加载
-                if (hasNext) {
-                    currentPage++;
-                    queryCourse(false);
-                } else {
-                    mAdapter.getLoadMoreModule().loadMoreEnd();
-                }
+        mAdapter.getLoadMoreModule().setOnLoadMoreListener(() -> {
+            //上拉加载
+            if (hasNext) {
+                currentPage++;
+                queryCourse(false);
+            } else {
+                mAdapter.getLoadMoreModule().loadMoreEnd();
             }
         });
-        mAdapter.setOnItemClickListener(new OnItemClickListener() {
-            @Override
-            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
-                if (position < mAdapter.getData().size()) {
-                    PianoRoomCourseListBean.RowsBean rowsBean = mAdapter.getData().get(position);
-                    if (rowsBean != null) {
-                        ARouter.getInstance().build(RouterPath.CourseCenter.PIANO_ROOM_COURSE_DETAIL)
-                                .withString("course_id", rowsBean.courseId)
-                                .navigation();
-                    }
+        mAdapter.setOnItemClickListener((adapter, view, position) -> {
+            if (position < mAdapter.getData().size()) {
+                PianoRoomCourseListBean.RowsBean rowsBean = mAdapter.getData().get(position);
+                if (rowsBean != null) {
+                    ARouter.getInstance().build(RouterPath.CourseCenter.PIANO_ROOM_COURSE_DETAIL)
+                            .withString("course_id", rowsBean.courseId)
+                            .navigation();
                 }
             }
         });
@@ -276,44 +269,6 @@ public class PianoRoomCourseFragment extends BaseMVPFragment<FragmentPianoRoomCo
         }
     }
 
-    private void initPopu(View targetView) {
-        if (mPopupWindow == null) {
-            View popupContentView = LayoutInflater.from(requireContext()).inflate(com.cooleshow.base.R.layout.list_popu_layout, null);
-            RecyclerView recyclerView = popupContentView.findViewById(R.id.recyclerView);
-            View bg = popupContentView.findViewById(com.cooleshow.base.R.id.view);
-            bg.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    if (mPopupWindow != null) {
-                        mPopupWindow.dismiss();
-                    }
-                }
-            });
-            mCourseStatusFilterAdapter = new CourseStatusFilterAdapter(com.cooleshow.base.R.layout.notice_popu_list_item);
-            mCourseStatusFilterAdapter.setOnItemClickListener(new OnItemClickListener() {
-                @Override
-                public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
-                    Object object = mCourseStatusFilterAdapter.getData().get(position);
-                    if (object instanceof CourseFilterStatusBean) {
-                        if (mCourseStatusFilterAdapter != null) {
-                            mCourseStatusFilterAdapter.setSelect(position);
-                        }
-                        CourseFilterStatusBean filterStatusBean = (CourseFilterStatusBean) object;
-                        mViewBinding.tvCourseStatus.setText(filterStatusBean.showText);
-                        reBuildFilter(currentSelectDate, filterStatusBean.value);
-                    }
-                    mPopupWindow.dismiss();
-                }
-            });
-            recyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
-            recyclerView.setAdapter(mCourseStatusFilterAdapter);
-            mCourseStatusFilterAdapter.setNewInstance(mCourseFilterStatusBeans);
-            mPopupWindow = PopupUtil.createNoBackPopupWindow(popupContentView, requireContext(), ViewGroup.LayoutParams.MATCH_PARENT,
-                    ViewGroup.LayoutParams.WRAP_CONTENT, true);
-        }
-        mPopupWindow.showAsDropDown(targetView);
-    }
-
     @Override
     public void onClick(View v) {
         if (v.getId() == R.id.tv_time) {
@@ -321,10 +276,51 @@ public class PianoRoomCourseFragment extends BaseMVPFragment<FragmentPianoRoomCo
             showTimeSelectPicker();
             return;
         }
+
         if (v.getId() == R.id.tv_course_status) {
             //课程状态筛选
-            initPopu(mViewBinding.tvCourseStatus);
+            List<PopMenuBean> popList = new ArrayList<>();
+            for (CourseFilterStatusBean bean : mCourseFilterStatusBeans) {
+                PopMenuBean popMenuBean = new PopMenuBean();
+                popMenuBean.setActionName(bean.showText);
+                popList.add(popMenuBean);
+            }
+            initCoursePop(mViewBinding.tvCourseStatus, popList, position -> {
+                CourseFilterStatusBean bean = mCourseFilterStatusBeans.get(position);
+                mViewBinding.tvCourseStatus.setText(bean.showText);
+                reBuildFilter(currentSelectDate, bean.value);
+            });
             return;
         }
+        if (v.getId() == R.id.tv_agency) {
+            //选择声部
+            if (subjectBeanList.size() == 0) {
+                subjectBeanList.add(new QuerySubjectBean("全部声部", 0));
+            }
+            List<PopMenuBean> popList = new ArrayList<>();
+            for (QuerySubjectBean bean : subjectBeanList) {
+                PopMenuBean popMenuBean = new PopMenuBean();
+                popMenuBean.setActionName(bean.name);
+                popList.add(popMenuBean);
+            }
+            initCoursePop(mViewBinding.tvAgency, popList, position -> {
+                QuerySubjectBean bean = subjectBeanList.get(position);
+                currentSubjectId = bean.id;
+                mViewBinding.tvAgency.setText(bean.name);
+                queryCourse(true);
+            });
+            return;
+        }
+    }
+
+    private void initCoursePop(View targetView, List<PopMenuBean> popList, PopupListWindow.PopupListListener listener) {
+        PopupListWindow popWindow = new PopupListWindow(getContext());
+        popWindow.showListPop(targetView, popList, position -> listener.onPopupListClick(position));
+    }
+
+    public void querySubjectItemSuccess(List<QuerySubjectBean> data) {
+        subjectBeanList.clear();
+        subjectBeanList.add(new QuerySubjectBean("全部声部", 0));
+        subjectBeanList.addAll(data);
     }
 }

+ 79 - 94
teacher/src/main/java/com/cooleshow/teacher/ui/course/SparringCourseFragment.java

@@ -22,10 +22,13 @@ import com.cooleshow.base.utils.LogUtils;
 import com.cooleshow.base.utils.PopupUtil;
 import com.cooleshow.base.utils.TimeUtils;
 import com.cooleshow.base.widgets.EmptyViewLayout;
+import com.cooleshow.base.widgets.poplist.PopMenuBean;
+import com.cooleshow.base.widgets.poplist.PopupListWindow;
 import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.adapter.CourseStatusFilterAdapter;
 import com.cooleshow.teacher.adapter.SparringCourseListAdapter;
 import com.cooleshow.teacher.bean.CourseFilterStatusBean;
+import com.cooleshow.teacher.bean.QuerySubjectBean;
 import com.cooleshow.teacher.bean.SparringCourseListBean;
 import com.cooleshow.teacher.constants.CourseConstants;
 import com.cooleshow.teacher.contract.SparringCourseContract;
@@ -37,6 +40,7 @@ import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.List;
 
 import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.LinearLayoutManager;
@@ -54,13 +58,11 @@ public class SparringCourseFragment extends BaseMVPFragment<FragmentSparringCour
     private boolean hasNext = true;
     private SparringCourseListAdapter mAdapter;
     private EmptyViewLayout mEmptyView;
-    private TextView mTvEmptyTip;
-    private ImageView mEmptyIcon;
     private TimePickerView pvTime;
-    private PopupWindow mPopupWindow;
     private ArrayList<CourseFilterStatusBean> mCourseFilterStatusBeans;
-    private CourseStatusFilterAdapter mCourseStatusFilterAdapter;
+    private List<QuerySubjectBean> subjectBeanList = new ArrayList<>();
     private boolean isFirstLoad = true;
+
     @Override
     protected FragmentSparringCourseLayoutBinding getLayoutView() {
         return FragmentSparringCourseLayoutBinding.inflate(getLayoutInflater());
@@ -75,19 +77,20 @@ public class SparringCourseFragment extends BaseMVPFragment<FragmentSparringCour
     protected void initView(View rootView) {
         mViewBinding.tvTime.setOnClickListener(this);
         mViewBinding.tvCourseStatus.setOnClickListener(this);
+        mViewBinding.tvAgency.setOnClickListener(this);
     }
 
     @Override
     public void refreshData() {
         super.refreshData();
-        reBuildFilter(currentSelectDate,currentCourseFilterStatus);
+        reBuildFilter(currentSelectDate, currentCourseFilterStatus);
         isFirstLoad = false;
     }
 
     @Override
     public void onResume() {
         super.onResume();
-        if(isFirstLoad){
+        if (isFirstLoad) {
             isFirstLoad = false;
             reBuildFilter(null, CourseConstants.COURSE_FILTER_ALL);
         }
@@ -118,40 +121,31 @@ public class SparringCourseFragment extends BaseMVPFragment<FragmentSparringCour
 
     @Override
     protected void initData() {
-        mViewBinding.refreshLayout.setOnRefreshListener(new OnRefreshListener() {
-            @Override
-            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
-                currentPage = 1;
-                queryCourse(true);
-            }
+        mViewBinding.refreshLayout.setOnRefreshListener(refreshLayout -> {
+            currentPage = 1;
+            queryCourse(true);
         });
 
         mAdapter = new SparringCourseListAdapter(R.layout.item_sparring_course_list_layout);
-        mAdapter.getLoadMoreModule().setOnLoadMoreListener(new OnLoadMoreListener() {
-            @Override
-            public void onLoadMore() {
-                //上拉加载
-                if (hasNext) {
-                    currentPage++;
-                    queryCourse(false);
-                } else {
-                    mAdapter.getLoadMoreModule().loadMoreEnd();
-                }
+        mAdapter.getLoadMoreModule().setOnLoadMoreListener(() -> {
+            //上拉加载
+            if (hasNext) {
+                currentPage++;
+                queryCourse(false);
+            } else {
+                mAdapter.getLoadMoreModule().loadMoreEnd();
             }
         });
-        mAdapter.setOnItemClickListener(new OnItemClickListener() {
-            @Override
-            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
-                if (position < mAdapter.getData().size()) {
-                    SparringCourseListBean.RowsBean rowsBean = mAdapter.getData().get(position);
-                    if (rowsBean != null) {
-                        ARouter.getInstance()
-                                .build(RouterPath.CourseCenter.SPARRING_COURSE_DETAIL)
-                                .withString(SparringCourseDetailActivity.COURSE_ID, rowsBean.courseId)
-                                .withString(SparringCourseDetailActivity.COURSE_GROUP_ID, rowsBean.courseGoupId)
-                                .withString(SparringCourseDetailActivity.STUDENT_ID, rowsBean.userId)
-                                .navigation();
-                    }
+        mAdapter.setOnItemClickListener((adapter, view, position) -> {
+            if (position < mAdapter.getData().size()) {
+                SparringCourseListBean.RowsBean rowsBean = mAdapter.getData().get(position);
+                if (rowsBean != null) {
+                    ARouter.getInstance()
+                            .build(RouterPath.CourseCenter.SPARRING_COURSE_DETAIL)
+                            .withString(SparringCourseDetailActivity.COURSE_ID, rowsBean.courseId)
+                            .withString(SparringCourseDetailActivity.COURSE_GROUP_ID, rowsBean.courseGoupId)
+                            .withString(SparringCourseDetailActivity.STUDENT_ID, rowsBean.userId)
+                            .navigation();
                 }
             }
         });
@@ -235,27 +229,16 @@ public class SparringCourseFragment extends BaseMVPFragment<FragmentSparringCour
         if (pvTime == null) {
             pvTime = new TimePickerBuilder(requireContext(), (date, v) -> {//选中事件回调
                 reBuildFilter(date, currentCourseFilterStatus);
-            }).setLayoutRes(com.cooleshow.base.R.layout.pickerview_default_layout, new CustomListener() {
-                @Override
-                public void customLayout(View v) {
-                    //自定义布局中的控件初始化及事件处理
-                    final TextView tvSubmit = (TextView) v.findViewById(com.cooleshow.base.R.id.tv_finish);
-                    TextView ivCancel = (TextView) v.findViewById(com.cooleshow.base.R.id.tv_cancel);
-                    tvSubmit.setOnClickListener(new View.OnClickListener() {
-                        @Override
-                        public void onClick(View v) {
-                            pvTime.returnData();
-                            pvTime.dismiss();
-                        }
-                    });
-                    ivCancel.setOnClickListener(new View.OnClickListener() {
-                        @Override
-                        public void onClick(View v) {
-                            pvTime.dismiss();
-                        }
-                    });
+            }).setLayoutRes(com.cooleshow.base.R.layout.pickerview_default_layout, v -> {
+                //自定义布局中的控件初始化及事件处理
+                final TextView tvSubmit = (TextView) v.findViewById(com.cooleshow.base.R.id.tv_finish);
+                TextView ivCancel = (TextView) v.findViewById(com.cooleshow.base.R.id.tv_cancel);
+                tvSubmit.setOnClickListener(v1 -> {
+                    pvTime.returnData();
+                    pvTime.dismiss();
+                });
+                ivCancel.setOnClickListener(v12 -> pvTime.dismiss());
 
-                }
             })
                     .setLineSpacingMultiplier(2.5f)
                     .setType(new boolean[]{true, true, false, false, false, false})// 默认全部显示
@@ -272,44 +255,6 @@ public class SparringCourseFragment extends BaseMVPFragment<FragmentSparringCour
         }
     }
 
-    private void initPopu(View targetView) {
-        if (mPopupWindow == null) {
-            View popupContentView = LayoutInflater.from(requireContext()).inflate(com.cooleshow.base.R.layout.list_popu_layout, null);
-            RecyclerView recyclerView = popupContentView.findViewById(R.id.recyclerView);
-            View bg = popupContentView.findViewById(com.cooleshow.base.R.id.view);
-            bg.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    if (mPopupWindow != null) {
-                        mPopupWindow.dismiss();
-                    }
-                }
-            });
-            mCourseStatusFilterAdapter = new CourseStatusFilterAdapter(com.cooleshow.base.R.layout.notice_popu_list_item);
-            mCourseStatusFilterAdapter.setOnItemClickListener(new OnItemClickListener() {
-                @Override
-                public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
-                    Object object = mCourseStatusFilterAdapter.getData().get(position);
-                    if (object instanceof CourseFilterStatusBean) {
-                        if (mCourseStatusFilterAdapter != null) {
-                            mCourseStatusFilterAdapter.setSelect(position);
-                        }
-                        CourseFilterStatusBean filterStatusBean = (CourseFilterStatusBean) object;
-                        mViewBinding.tvCourseStatus.setText(filterStatusBean.showText);
-                        reBuildFilter(currentSelectDate, filterStatusBean.value);
-                    }
-                    mPopupWindow.dismiss();
-                }
-            });
-            recyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
-            recyclerView.setAdapter(mCourseStatusFilterAdapter);
-            mCourseStatusFilterAdapter.setNewInstance(mCourseFilterStatusBeans);
-            mPopupWindow = PopupUtil.createNoBackPopupWindow(popupContentView, requireContext(), ViewGroup.LayoutParams.MATCH_PARENT,
-                    ViewGroup.LayoutParams.WRAP_CONTENT, true);
-        }
-        mPopupWindow.showAsDropDown(targetView);
-    }
-
     @Override
     public void onClick(View v) {
         if (v.getId() == R.id.tv_time) {
@@ -319,8 +264,48 @@ public class SparringCourseFragment extends BaseMVPFragment<FragmentSparringCour
         }
         if (v.getId() == R.id.tv_course_status) {
             //课程状态筛选
-            initPopu(mViewBinding.tvCourseStatus);
+            List<PopMenuBean> popList = new ArrayList<>();
+            for (CourseFilterStatusBean bean : mCourseFilterStatusBeans) {
+                PopMenuBean popMenuBean = new PopMenuBean();
+                popMenuBean.setActionName(bean.showText);
+                popList.add(popMenuBean);
+            }
+            initCoursePop(mViewBinding.tvCourseStatus, popList, position -> {
+                CourseFilterStatusBean bean = mCourseFilterStatusBeans.get(position);
+                mViewBinding.tvCourseStatus.setText(bean.showText);
+                reBuildFilter(currentSelectDate, bean.value);
+            });
+            return;
+        }
+        if (v.getId() == R.id.tv_agency) {
+            //选择声部
+            if (subjectBeanList.size() == 0) {
+                subjectBeanList.add(new QuerySubjectBean("全部声部", 0));
+            }
+            List<PopMenuBean> popList = new ArrayList<>();
+            for (QuerySubjectBean bean : subjectBeanList) {
+                PopMenuBean popMenuBean = new PopMenuBean();
+                popMenuBean.setActionName(bean.name);
+                popList.add(popMenuBean);
+            }
+            initCoursePop(mViewBinding.tvAgency, popList, position -> {
+                QuerySubjectBean bean = subjectBeanList.get(position);
+                currentSubjectId = bean.id;
+                mViewBinding.tvAgency.setText(bean.name);
+                queryCourse(true);
+            });
             return;
         }
     }
+
+    private void initCoursePop(View targetView, List<PopMenuBean> popList, PopupListWindow.PopupListListener listener) {
+        PopupListWindow popWindow = new PopupListWindow(getContext());
+        popWindow.showListPop(targetView, popList, position -> listener.onPopupListClick(position));
+    }
+
+    public void querySubjectItemSuccess(List<QuerySubjectBean> data) {
+        subjectBeanList.clear();
+        subjectBeanList.add(new QuerySubjectBean("全部声部", 0));
+        subjectBeanList.addAll(data);
+    }
 }

+ 35 - 45
teacher/src/main/java/com/cooleshow/teacher/ui/course/VideoCourseFragment.java

@@ -19,10 +19,13 @@ import com.cooleshow.base.utils.LogUtils;
 import com.cooleshow.base.utils.PopupUtil;
 import com.cooleshow.base.utils.SizeUtils;
 import com.cooleshow.base.widgets.EmptyViewLayout;
+import com.cooleshow.base.widgets.poplist.PopMenuBean;
+import com.cooleshow.base.widgets.poplist.PopupListWindow;
 import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.adapter.CourseStatusFilterAdapter;
 import com.cooleshow.teacher.adapter.VideoCourseListAdapter;
 import com.cooleshow.teacher.bean.CourseFilterStatusBean;
+import com.cooleshow.teacher.bean.QuerySubjectBean;
 import com.cooleshow.teacher.bean.VideoCourseListBean;
 import com.cooleshow.teacher.constants.CourseConstants;
 import com.cooleshow.teacher.contract.VideoCourseContract;
@@ -37,6 +40,9 @@ import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Author by pq, Date on 2022/4/25.
  */
@@ -45,10 +51,7 @@ public class VideoCourseFragment extends BaseMVPFragment<FragmentVideoCourseLayo
     private int currentPage;
     private VideoCourseListAdapter mAdapter;
     private EmptyViewLayout mEmptyView;
-    private TextView mTvEmptyTip;
-    private ImageView mEmptyIcon;
-    private PopupWindow mPopupWindow;
-    private CourseStatusFilterAdapter mCourseStatusFilterAdapter;
+    private List<QuerySubjectBean> subjectBeanList = new ArrayList<>();
     private boolean hasNext = true;
     private boolean isFirstLoad = true;
 
@@ -238,51 +241,38 @@ public class VideoCourseFragment extends BaseMVPFragment<FragmentVideoCourseLayo
         mAdapter.setEmptyView(mEmptyView);
     }
 
-
-    private void initPopu(View targetView) {
-        if (mPopupWindow == null) {
-            View popupContentView = LayoutInflater.from(requireContext()).inflate(com.cooleshow.base.R.layout.list_popu_layout, null);
-            RecyclerView recyclerView = popupContentView.findViewById(R.id.recyclerView);
-            View bg = popupContentView.findViewById(com.cooleshow.base.R.id.view);
-            bg.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    if (mPopupWindow != null) {
-                        mPopupWindow.dismiss();
-                    }
-                }
-            });
-            mCourseStatusFilterAdapter = new CourseStatusFilterAdapter(com.cooleshow.base.R.layout.notice_popu_list_item);
-            mCourseStatusFilterAdapter.setOnItemClickListener(new OnItemClickListener() {
-                @Override
-                public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
-                    Object object = mCourseStatusFilterAdapter.getData().get(position);
-                    if (object instanceof CourseFilterStatusBean) {
-                        if (mCourseStatusFilterAdapter != null) {
-                            mCourseStatusFilterAdapter.setSelect(position);
-                        }
-                        CourseFilterStatusBean filterStatusBean = (CourseFilterStatusBean) object;
-                        mViewBinding.tvSubject.setText(filterStatusBean.showText);
-                        reBuildFilter();
-                    }
-                    mPopupWindow.dismiss();
-                }
-            });
-            recyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
-            recyclerView.setAdapter(mCourseStatusFilterAdapter);
-//            mCourseStatusFilterAdapter.setNewInstance(mCourseFilterStatusBeans);
-            mPopupWindow = PopupUtil.createNoBackPopupWindow(popupContentView, requireContext(), ViewGroup.LayoutParams.MATCH_PARENT,
-                    ViewGroup.LayoutParams.WRAP_CONTENT, true);
-        }
-        mPopupWindow.showAsDropDown(targetView);
-    }
-
     @Override
     public void onClick(View v) {
-        if (v.getId() == R.id.tv_course_status) {
+        if (v.getId() == R.id.tv_subject) {
             //课程状态筛选
-            initPopu(mViewBinding.tvSubject);
+            //选择声部
+            if (subjectBeanList.size() == 0) {
+                subjectBeanList.add(new QuerySubjectBean("全部声部", 0));
+            }
+            List<PopMenuBean> popList = new ArrayList<>();
+            for (QuerySubjectBean bean : subjectBeanList) {
+                PopMenuBean popMenuBean = new PopMenuBean();
+                popMenuBean.setActionName(bean.name);
+                popList.add(popMenuBean);
+            }
+            initCoursePop(mViewBinding.tvSubject, popList, position -> {
+                QuerySubjectBean bean = subjectBeanList.get(position);
+                currentSubjectId = bean.id;
+                mViewBinding.tvSubject.setText(bean.name);
+                queryCourse(true);
+            });
             return;
         }
     }
+
+    private void initCoursePop(View targetView, List<PopMenuBean> popList, PopupListWindow.PopupListListener listener) {
+        PopupListWindow popWindow = new PopupListWindow(getContext());
+        popWindow.showListPop(targetView, popList, position -> listener.onPopupListClick(position));
+    }
+
+    public void querySubjectItemSuccess(List<QuerySubjectBean> data) {
+        subjectBeanList.clear();
+        subjectBeanList.add(new QuerySubjectBean("全部声部", 0));
+        subjectBeanList.addAll(data);
+    }
 }

+ 9 - 5
teacher/src/main/res/layout/fragment_live_course_layout.xml

@@ -11,7 +11,7 @@
         android:layout_height="wrap_content"
         android:layout_marginStart="25dp"
         android:drawableRight="@drawable/icon_arrow_down"
-        android:drawablePadding="4dp"
+        android:drawablePadding="6dp"
         android:gravity="center"
         android:includeFontPadding="false"
         android:paddingTop="18dp"
@@ -29,7 +29,9 @@
         android:layout_width="wrap_content"
         android:layout_height="0dp"
         android:drawableRight="@drawable/icon_arrow_down"
-        android:drawablePadding="4dp"
+        android:drawablePadding="6dp"
+        android:paddingTop="18dp"
+        android:paddingBottom="12dp"
         android:gravity="center"
         android:includeFontPadding="false"
         android:textColor="@color/color_666666"
@@ -45,14 +47,16 @@
         android:id="@+id/tv_agency"
         android:layout_width="wrap_content"
         android:layout_height="0dp"
-        android:layout_marginEnd="25dp"
+        android:layout_marginEnd="23dp"
         android:drawableRight="@drawable/icon_arrow_down"
-        android:drawablePadding="4dp"
+        android:drawablePadding="6dp"
+        android:paddingTop="18dp"
+        android:paddingBottom="12dp"
         android:gravity="center"
         android:includeFontPadding="false"
         android:textColor="@color/color_666666"
         android:textSize="@dimen/sp_13"
-        android:text="声部"
+        android:text="全部声部"
         app:layout_constraintBottom_toBottomOf="@+id/tv_time"
         app:layout_constraintLeft_toRightOf="@+id/tv_course_status"
         app:layout_constraintRight_toRightOf="parent"

+ 9 - 5
teacher/src/main/res/layout/fragment_piano_room_course_layout.xml

@@ -11,7 +11,7 @@
         android:layout_height="wrap_content"
         android:layout_marginStart="25dp"
         android:drawableRight="@drawable/icon_arrow_down"
-        android:drawablePadding="4dp"
+        android:drawablePadding="6dp"
         android:gravity="center"
         android:includeFontPadding="false"
         android:paddingTop="18dp"
@@ -29,7 +29,9 @@
         android:layout_width="wrap_content"
         android:layout_height="0dp"
         android:drawableRight="@drawable/icon_arrow_down"
-        android:drawablePadding="4dp"
+        android:drawablePadding="6dp"
+        android:paddingTop="18dp"
+        android:paddingBottom="12dp"
         android:gravity="center"
         android:includeFontPadding="false"
         android:textColor="@color/color_666666"
@@ -45,14 +47,16 @@
         android:id="@+id/tv_agency"
         android:layout_width="wrap_content"
         android:layout_height="0dp"
-        android:layout_marginEnd="25dp"
+        android:layout_marginEnd="23dp"
         android:drawableRight="@drawable/icon_arrow_down"
-        android:drawablePadding="4dp"
+        android:drawablePadding="6dp"
         android:gravity="center"
+        android:paddingTop="18dp"
+        android:paddingBottom="12dp"
         android:includeFontPadding="false"
         android:textColor="@color/color_666666"
         android:textSize="@dimen/sp_13"
-        android:text="声部"
+        android:text="全部声部"
         app:layout_constraintBottom_toBottomOf="@+id/tv_time"
         app:layout_constraintLeft_toRightOf="@+id/tv_course_status"
         app:layout_constraintRight_toRightOf="parent"

+ 11 - 7
teacher/src/main/res/layout/fragment_sparring_course_layout.xml

@@ -11,7 +11,7 @@
         android:layout_height="wrap_content"
         android:layout_marginStart="25dp"
         android:drawableRight="@drawable/icon_arrow_down"
-        android:drawablePadding="4dp"
+        android:drawablePadding="6dp"
         android:gravity="center"
         android:includeFontPadding="false"
         android:paddingTop="18dp"
@@ -27,14 +27,16 @@
     <TextView
         android:id="@+id/tv_course_status"
         android:layout_width="wrap_content"
-        android:layout_height="0dp"
+        android:layout_height="wrap_content"
         android:drawableRight="@drawable/icon_arrow_down"
-        android:drawablePadding="4dp"
+        android:drawablePadding="6dp"
         android:gravity="center"
         android:includeFontPadding="false"
+        android:paddingTop="@dimen/dp_18"
+        android:paddingBottom="@dimen/dp_12"
+        android:text="课程状态"
         android:textColor="@color/color_666666"
         android:textSize="@dimen/sp_13"
-        android:text="课程状态"
         app:layout_constraintBottom_toBottomOf="@+id/tv_time"
         app:layout_constraintLeft_toRightOf="@+id/tv_time"
         app:layout_constraintRight_toLeftOf="@+id/tv_agency"
@@ -45,14 +47,16 @@
         android:id="@+id/tv_agency"
         android:layout_width="wrap_content"
         android:layout_height="0dp"
-        android:layout_marginEnd="25dp"
+        android:layout_marginEnd="23dp"
         android:drawableRight="@drawable/icon_arrow_down"
-        android:drawablePadding="4dp"
+        android:drawablePadding="6dp"
         android:gravity="center"
         android:includeFontPadding="false"
+        android:paddingTop="@dimen/dp_18"
+        android:paddingBottom="@dimen/dp_12"
+        android:text="全部声部"
         android:textColor="@color/color_666666"
         android:textSize="@dimen/sp_13"
-        android:text="声部"
         app:layout_constraintBottom_toBottomOf="@+id/tv_time"
         app:layout_constraintLeft_toRightOf="@+id/tv_course_status"
         app:layout_constraintRight_toRightOf="parent"

+ 2 - 1
teacher/src/main/res/layout/fragment_video_course_layout.xml

@@ -13,10 +13,11 @@
         android:layout_height="wrap_content"
         android:layout_marginStart="25dp"
         android:drawableRight="@drawable/icon_arrow_down"
-        android:drawablePadding="4dp"
+        android:drawablePadding="6dp"
         android:gravity="center"
         android:includeFontPadding="false"
         android:paddingTop="18dp"
+        android:paddingBottom="@dimen/dp_12"
         android:textColor="@color/color_666666"
         android:textSize="@dimen/sp_13"
         android:text="全部声部"