Pārlūkot izejas kodu

优化老师端课后作业页面样式和交互

Pq 8 mēneši atpakaļ
vecāks
revīzija
17ab5beb66

+ 24 - 13
teacher/src/main/java/com/cooleshow/teacher/adapter/HomeWorkPagerAdapter.java

@@ -1,9 +1,13 @@
 package com.cooleshow.teacher.adapter;
 
+import androidx.annotation.NonNull;
 import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentPagerAdapter;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -12,30 +16,37 @@ import java.util.List;
  * @author Ryan
  * 类说明:
  */
-public class HomeWorkPagerAdapter extends FragmentPagerAdapter {
+public class HomeWorkPagerAdapter extends FragmentStateAdapter {
+    private ArrayList<Fragment> mFragments;
 
-    private List<String> titles;
+    public void setFragments(ArrayList<Fragment> fragments) {
+        this.mFragments = fragments;
+    }
 
-    private List<Fragment> fragments;
+    public HomeWorkPagerAdapter(@NonNull FragmentActivity fragmentActivity) {
+        super(fragmentActivity);
+    }
 
-    public HomeWorkPagerAdapter(FragmentManager fm, List<Fragment> fragments, List<String> titles) {
-        super(fm);
-        this.titles = titles;
-        this.fragments = fragments;
+    @NonNull
+    @Override
+    public Fragment createFragment(int position) {
+        Fragment fragment = mFragments.get(position);
+        return fragment;
     }
 
     @Override
-    public Fragment getItem(int position) {
-        return fragments != null && fragments.size() > position ? fragments.get(position) : null;
+    public int getItemCount() {
+        return mFragments != null ? mFragments.size() : 0;
     }
 
     @Override
-    public int getCount() {
-        return fragments == null ? 0 : fragments.size();
+    public long getItemId(int position) {
+        Fragment fragment = mFragments.get(position);
+        return fragment != null ? fragment.hashCode() : super.getItemId(position);
     }
 
     @Override
-    public CharSequence getPageTitle(int position) {
-        return titles != null && titles.size() > position ? titles.get(position) : "";
+    public boolean containsItem(long itemId) {
+        return super.containsItem(itemId);
     }
 }

+ 11 - 31
teacher/src/main/java/com/cooleshow/teacher/adapter/HomeworkAdapter.java

@@ -30,7 +30,7 @@ import java.util.List;
  * @author Ryan
  * 类说明:
  */
-public class HomeworkAdapter extends BaseQuickAdapter<HomeworkListBean.RowsBean, BaseViewHolder> implements LoadMoreModule {
+public class HomeworkAdapter extends BaseQuickAdapter<HomeworkListBean.RowsBean, BaseViewHolder> {
 
     private String mDecorate;
 
@@ -46,15 +46,14 @@ public class HomeworkAdapter extends BaseQuickAdapter<HomeworkListBean.RowsBean,
             return;
         }
         TextView tv_state = helper.getView(R.id.tv_state);
-        ImageView im_header = helper.getView(R.id.im_header);
+        ImageView im_header = helper.getView(R.id.iv_avatar);
+        helper.setText(R.id.tv_title, item.courseGroupName);
         TextView tv_name = helper.getView(R.id.tv_name);
-        RecyclerView rv_mark = helper.getView(R.id.rv_mark);
+        tv_name.setText(item.studentName);
         if (TextUtils.equals(item.type, CourseConstants.PIANO_ROOM_COURSE)) {
             im_header.setImageResource(R.drawable.icon_piano_room_course);
-            tv_name.setText(item.courseGroupName);
         } else {
             GlideUtils.INSTANCE.loadImage(getContext(), item.studentAvatar, im_header, R.drawable.icon_teacher_default_head);
-            tv_name.setText(item.studentName);
         }
 
         if (TextUtils.equals(mDecorate, "YES")) {
@@ -70,36 +69,17 @@ public class HomeworkAdapter extends BaseQuickAdapter<HomeworkListBean.RowsBean,
                 tv_state.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.color_999999));
             }
         } else {
-            tv_state.setVisibility(View.GONE);
-        }
-        if (!TextUtils.isEmpty(item.subjectName)) {
-            rv_mark.setVisibility(View.VISIBLE);
-            List<String> markList = new ArrayList<>();
-            if (item.subjectName.contains(",")) {
-                String[] split = item.subjectName.split(",");
-                for (String s : split) {
-                    markList.add(s);
-                }
-            } else {
-                markList.add(item.subjectName);
-            }
-            LinearLayoutManager manager = new LinearLayoutManager(getContext());
-            manager.setOrientation(LinearLayoutManager.HORIZONTAL);
-            rv_mark.setLayoutManager(manager);
-            ItemMarkAdapter itemMarkAdapter = new ItemMarkAdapter(markList);
-            rv_mark.setAdapter(itemMarkAdapter);
-        } else {
-            rv_mark.setVisibility(View.GONE);
+            tv_state.setText("未布置");
+            tv_state.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.color_ff802c));
+            tv_state.setVisibility(View.VISIBLE);
         }
 
-        helper.setText(R.id.tv_date, UiUtils.getCourseTimeString(item.startTime, item.endTime));
+        helper.setText(R.id.tv_course_name, item.getSubjectName());
 
-    }
+        helper.setText(R.id.tv_time, UiUtils.getCourseTimeString(item.startTime, item.endTime));
 
-    @NonNull
-    @Override
-    public BaseLoadMoreModule addLoadMoreModule(@NonNull BaseQuickAdapter<?, ?> baseQuickAdapter) {
-        return new BaseLoadMoreModule(baseQuickAdapter);
+        ImageView iv_attendance_status = helper.getView(R.id.iv_attendance_status);
+        iv_attendance_status.setImageResource(item.isAttendanceStatus() ? R.drawable.icon_course_attendance_arrive : R.drawable.icon_course_attendance_truancy);
     }
 
     public void setDecorate(String decorate) {

+ 27 - 0
teacher/src/main/java/com/cooleshow/teacher/bean/HomeworkListBean.java

@@ -23,6 +23,14 @@ public class HomeworkListBean {
     public int totalPage;
     public List<RowsBean> rows;
 
+    public List<RowsBean> getRows() {
+        return rows;
+    }
+
+    public void setRows(List<RowsBean> rows) {
+        this.rows = rows;
+    }
+
     public static class RowsBean {
         public String startTime;
         public String endTime;
@@ -48,6 +56,25 @@ public class HomeworkListBean {
         public int homeworkId;
         public String type;
         public boolean delFlag;
+        public boolean attendanceStatus;
+
+        public boolean isAttendanceStatus() {
+            return attendanceStatus;
+        }
+
+        public void setAttendanceStatus(boolean attendanceStatus) {
+            this.attendanceStatus = attendanceStatus;
+        }
+
+        public String getSubjectName() {
+            return subjectName;
+        }
+
+        public void setSubjectName(String subjectName) {
+            this.subjectName = subjectName;
+        }
+
+
         /*
             "startTime": "2022-06-30 13:00:00",
 			"endTime": "2022-06-30 13:45:00",

+ 67 - 26
teacher/src/main/java/com/cooleshow/teacher/ui/work/HomeWorkActivity.java

@@ -1,21 +1,29 @@
 package com.cooleshow.teacher.ui.work;
 
+import android.graphics.Typeface;
 import android.os.Bundle;
+import android.view.LayoutInflater;
 import android.view.View;
+import android.widget.TextView;
 
 import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
 import androidx.viewpager.widget.ViewPager;
+import androidx.viewpager2.widget.ViewPager2;
 
 import com.alibaba.android.arouter.facade.annotation.Route;
 import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.utils.UiUtils;
+import com.cooleshow.base.utils.Utils;
 import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
+import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.adapter.HomeWorkPagerAdapter;
 import com.cooleshow.teacher.contract.HomeWorkActContract;
 import com.cooleshow.teacher.databinding.ActivityHomeworkBinding;
 import com.cooleshow.teacher.presenter.homework.HomeWorkActPresenter;
 import com.google.android.material.tabs.TabLayout;
+import com.google.android.material.tabs.TabLayoutMediator;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -32,14 +40,15 @@ import java.util.List;
 public class HomeWorkActivity extends BaseMVPActivity<ActivityHomeworkBinding, HomeWorkActPresenter> implements HomeWorkActContract.HomeWorkActView, View.OnClickListener {
     private List<String> titles = new ArrayList<String>(Arrays.asList("未布置", "已布置"));
     private List<String> auditStatusList = new ArrayList<String>(Arrays.asList("NO", "YES"));
-    private List<Fragment> fragments = new ArrayList<>();
+    private ArrayList<Fragment> fragments = new ArrayList<>();
     private TabLayout tabLayout;
-    private ViewPager viewPager;
+    private ViewPager2 viewPager;
+    private HomeWorkPagerAdapter mHomeWorkPagerAdapter;
 
     @Override
     protected void initView() {
         QMUIStatusBarHelper.setStatusBarLightMode(this);
-        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "课后作业");
+        Utils.setHeadView(viewBinding.viewStatusBar, this, 0);
         tabLayout = viewBinding.tablayout;
         viewPager = viewBinding.viewpager;
         viewPager.setCurrentItem(0);
@@ -50,10 +59,6 @@ public class HomeWorkActivity extends BaseMVPActivity<ActivityHomeworkBinding, H
         return ActivityHomeworkBinding.inflate(getLayoutInflater());
     }
 
-    @Override
-    public void onClick(View view) {
-
-    }
 
     @Override
     protected HomeWorkActPresenter createPresenter() {
@@ -63,39 +68,75 @@ public class HomeWorkActivity extends BaseMVPActivity<ActivityHomeworkBinding, H
     @Override
     public void initData() {
         super.initData();
+        initListener();
         initTabLayoutAndViewPager();
     }
 
-    private void initTabLayoutAndViewPager() {
-        tabLayout.removeAllTabs();
-        fragments.clear();
-        for (int i = 0; i < titles.size(); i++) {
-            tabLayout.addTab(tabLayout.newTab().setText(titles.get(i)));
-            Fragment adFragment = HomeWorkFragment.newInstance(auditStatusList.get(i));
-            fragments.add(adFragment);
-        }
-        viewPager.setAdapter(new HomeWorkPagerAdapter(getSupportFragmentManager(), fragments, titles));
-        tabLayout.setupWithViewPager(viewPager);
-
-        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+    private void initListener() {
+        viewBinding.ivBack.setOnClickListener(this);
+        viewBinding.tablayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
             @Override
-            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-
+            public void onTabSelected(TabLayout.Tab tab) {
+                if (tab != null && tab.getCustomView() != null) {
+                    View customView = tab.getCustomView();
+                    TextView tv_text = customView.findViewById(R.id.tv_text);
+                    tv_text.setTextSize(16);
+                    tv_text.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_131415));
+                    tv_text.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
+                }
             }
 
             @Override
-            public void onPageSelected(int position) {
-                HomeWorkFragment fragment = (HomeWorkFragment) fragments.get(position);
-                if (fragment != null) {
-                    fragment.queryCourse(false);
+            public void onTabUnselected(TabLayout.Tab tab) {
+                if (tab != null && tab.getCustomView() != null) {
+                    View customView = tab.getCustomView();
+                    TextView tv_text = customView.findViewById(R.id.tv_text);
+                    tv_text.setTextSize(16);
+                    tv_text.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_80000000));
+                    tv_text.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
                 }
             }
 
             @Override
-            public void onPageScrollStateChanged(int state) {
+            public void onTabReselected(TabLayout.Tab tab) {
 
             }
         });
     }
 
+    @Override
+    public void onClick(View view) {
+        int id = view.getId();
+        if (id == R.id.iv_back) {
+            finish();
+            return;
+        }
+    }
+
+    private void initTabLayoutAndViewPager() {
+        tabLayout.removeAllTabs();
+        fragments.clear();
+
+        TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(viewBinding.tablayout, viewBinding.viewpager, (tab, position) -> {
+            //这里需要根据position修改tab的样式和文字等
+            createTab(tab, titles.get(position));
+        });
+
+        for (int i = 0; i < titles.size(); i++) {
+            Fragment adFragment = HomeWorkFragment.newInstance(auditStatusList.get(i));
+            fragments.add(adFragment);
+        }
+        mHomeWorkPagerAdapter = new HomeWorkPagerAdapter(this);
+        mHomeWorkPagerAdapter.setFragments(fragments);
+        viewPager.setAdapter(mHomeWorkPagerAdapter);
+        tabLayoutMediator.attach();
+    }
+
+    private TabLayout.Tab createTab(TabLayout.Tab tab, String text) {
+        View view = LayoutInflater.from(this).inflate(R.layout.view_mine_course_tab_layout, null);
+        TextView tv_text = view.findViewById(R.id.tv_text);
+        tv_text.setText(text);
+        tab.setCustomView(view);
+        return tab;
+    }
 }

+ 60 - 41
teacher/src/main/java/com/cooleshow/teacher/ui/work/HomeWorkFragment.java

@@ -19,9 +19,8 @@ import com.chad.library.adapter.base.listener.OnItemChildClickListener;
 import com.cooleshow.base.constanst.Constants;
 import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.fragment.BaseMVPFragment;
+import com.cooleshow.base.utils.LOG;
 import com.cooleshow.base.utils.TimeUtils;
-import com.cooleshow.base.utils.ToastUtil;
-import com.cooleshow.base.utils.ToastUtils;
 import com.cooleshow.chatmodule.utils.helper.ChatHelper;
 import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.adapter.HomeworkAdapter;
@@ -31,6 +30,9 @@ import com.cooleshow.teacher.constants.TeacherConfig;
 import com.cooleshow.teacher.contract.HomeWorkContract;
 import com.cooleshow.teacher.databinding.FragmentHomeworkBinding;
 import com.cooleshow.teacher.presenter.homework.HomeWorkPresenter;
+import com.scwang.smart.refresh.footer.ClassicsFooter;
+import com.scwang.smart.refresh.layout.api.RefreshLayout;
+import com.scwang.smart.refresh.layout.listener.OnLoadMoreListener;
 
 import java.util.Calendar;
 import java.util.Date;
@@ -45,7 +47,7 @@ import java.util.List;
 public class HomeWorkFragment extends BaseMVPFragment<FragmentHomeworkBinding, HomeWorkPresenter> implements HomeWorkContract.HomeWorkView, View.OnClickListener {
     private int currentPage;
     private String decorate = "";
-    private HomeworkAdapter homeworkAdapter;
+    private HomeworkAdapter mAdapter;
     private boolean hasNext = true;
     private TimePickerView pvTime;
     private Date currentSelectDate;
@@ -82,16 +84,27 @@ public class HomeWorkFragment extends BaseMVPFragment<FragmentHomeworkBinding, H
     protected void initView(View rootView) {
         decorate = getArguments().getString("decorate");
         mViewBinding.tvDate.setOnClickListener(this);
-        RecyclerView rvAddress = mViewBinding.recyclerView;
+        mViewBinding.refreshLayout.setRefreshFooter(new ClassicsFooter(getContext()));
+        RecyclerView rvAddress = mViewBinding.recyclerViewList;
         LinearLayoutManager manager = new LinearLayoutManager(getContext());
         rvAddress.setLayoutManager(manager);
-        homeworkAdapter = new HomeworkAdapter();
-        homeworkAdapter.setDecorate(decorate);
+        mAdapter = new HomeworkAdapter();
+        mAdapter.setDecorate(decorate);
         LayoutInflater inflater = LayoutInflater.from(getContext());
         View emptyLayout = inflater.inflate(R.layout.layout_empty_conent, null);
-        homeworkAdapter.setEmptyView(emptyLayout);
-        rvAddress.setAdapter(homeworkAdapter);
-        homeworkAdapter.setOnItemClickListener((adapter, view, position) -> {
+        mAdapter.setEmptyView(emptyLayout);
+        rvAddress.setAdapter(mAdapter);
+    }
+
+    @Override
+    protected void initData() {
+        currentPage = 1;
+        initListener();
+        reBuildFilter(null);
+    }
+
+    private void initListener(){
+        mAdapter.setOnItemClickListener((adapter, view, position) -> {
             List<HomeworkListBean.RowsBean> data = (List<HomeworkListBean.RowsBean>) adapter.getData();
             HomeworkListBean.RowsBean rowsBean = data.get(position);
             if (rowsBean != null && TextUtils.equals(CourseConstants.PIANO_ROOM_COURSE, rowsBean.type)) {
@@ -112,13 +125,13 @@ public class HomeWorkFragment extends BaseMVPFragment<FragmentHomeworkBinding, H
             }
         });
 
-        homeworkAdapter.setOnItemChildClickListener(new OnItemChildClickListener() {
+        mAdapter.setOnItemChildClickListener(new OnItemChildClickListener() {
             @Override
             public void onItemChildClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
-                if (position >= homeworkAdapter.getData().size()) {
+                if (position >= mAdapter.getData().size()) {
                     return;
                 }
-                HomeworkListBean.RowsBean rowsBean = homeworkAdapter.getData().get(position);
+                HomeworkListBean.RowsBean rowsBean = mAdapter.getData().get(position);
                 if (TextUtils.equals(rowsBean.type, CourseConstants.OTHER_COURSE)
                         || TextUtils.equals(rowsBean.type, CourseConstants.VIP_COURSE)) {
                     //VIP课或者趣纠课
@@ -129,32 +142,31 @@ public class HomeWorkFragment extends BaseMVPFragment<FragmentHomeworkBinding, H
                 }
             }
         });
-    }
 
-    @Override
-    protected void initData() {
         mViewBinding.refreshLayout.setOnRefreshListener(refreshLayout -> {
             currentPage = 1;
-            queryCourse(true);
+            queryCourse(false);
         });
-        homeworkAdapter.getLoadMoreModule().setOnLoadMoreListener(() -> {
-            //上拉加载
-            if (hasNext) {
-                currentPage++;
-                queryCourse(false);
-            } else {
-                homeworkAdapter.getLoadMoreModule().loadMoreEnd();
+
+        mViewBinding.refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
+            @Override
+            public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
+                //上拉加载
+                if (hasNext) {
+                    currentPage++;
+                    queryCourse(false);
+                } else {
+                    mViewBinding.refreshLayout.finishLoadMoreWithNoMoreData();
+                }
             }
         });
-        currentPage = 1;
-        reBuildFilter(null);
     }
 
 
     @Override
     public void onResume() {
         super.onResume();
-        queryCourse(true);
+        queryCourse(false);
     }
 
     /**
@@ -171,26 +183,33 @@ public class HomeWorkFragment extends BaseMVPFragment<FragmentHomeworkBinding, H
     }
 
     @Override
-    public void queryHomeworkListSuccess(int page, HomeworkListBean data) {
+    public void queryHomeworkListSuccess(int page, HomeworkListBean dataList) {
         if (isDetached()) {
             return;
         }
-        if (data != null) {
+        LOG.i("pq", "onGetCourseGroupSuccess:" + dataList);
+        if (dataList != null) {
             if (page == 1) {
+                //第一页
                 mViewBinding.refreshLayout.finishRefresh();
-                homeworkAdapter.getData().clear();
-                homeworkAdapter.notifyDataSetChanged();
-                if (data.rows != null && data.rows.size() > 0) {
-                    checkHasNext(data.rows.size());
-                    homeworkAdapter.setNewInstance(data.rows);
+                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 (data.rows != null && data.rows.size() > 0) {
-                    homeworkAdapter.getLoadMoreModule().loadMoreComplete();
-                    homeworkAdapter.addData(data.rows);
-                    checkHasNext(data.rows.size());
-                } else {
-                    homeworkAdapter.getLoadMoreModule().loadMoreEnd();
+                //加载更多
+                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();
+                    }
                 }
             }
         }
@@ -205,9 +224,9 @@ public class HomeWorkFragment extends BaseMVPFragment<FragmentHomeworkBinding, H
         if (page == 1) {
             mViewBinding.refreshLayout.finishRefresh();
         } else {
-            if (homeworkAdapter != null) {
+            if (mAdapter != null) {
                 currentPage--;
-                homeworkAdapter.getLoadMoreModule().loadMoreFail();
+                mViewBinding.refreshLayout.finishLoadMore(false);
             }
         }
     }

+ 42 - 14
teacher/src/main/res/layout/activity_homework.xml

@@ -1,38 +1,66 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<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:layout_height="match_parent"
-    android:background="@color/color_f6f8f9"
     android:orientation="vertical">
 
-    <include
-        android:id="@+id/toolbar_include"
-        layout="@layout/common_toolbar_layout" />
+    <ImageView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:adjustViewBounds="true"
+        android:src="@drawable/bg_appointment_top"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <View
+        android:id="@+id/view_status_bar"
+        android:layout_width="match_parent"
+        android:layout_height="1px"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
 
     <com.google.android.material.tabs.TabLayout
-        android:background="@color/white"
         android:id="@+id/tablayout"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/dp_44"
+        android:layout_width="wrap_content"
+        android:layout_height="@dimen/dp_50"
         android:scrollbars="none"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/view_status_bar"
         app:tabBackground="@null"
         app:tabGravity="fill"
         app:tabIndicator="@drawable/tab_indicator"
         app:tabIndicatorColor="@color/color_2dc7aa"
         app:tabIndicatorFullWidth="false"
         app:tabIndicatorHeight="4dp"
-        app:tabMode="fixed"
+        app:tabMode="scrollable"
+        app:tabPaddingEnd="16dp"
+        app:tabPaddingStart="16dp"
         app:tabRippleColor="@null"
         app:tabSelectedTextColor="@color/black_333"
         app:tabTextAppearance="@style/tab_layout_style"
         app:tabTextColor="@color/color_666666" />
+    <ImageView
+        android:id="@+id/iv_back"
+        android:layout_width="wrap_content"
+        android:layout_height="0dp"
+        android:layout_gravity="center_vertical"
+        android:paddingStart="19dp"
+        android:paddingRight="12dp"
+        android:src="@drawable/icon_back_black"
+        app:layout_constraintBottom_toBottomOf="@+id/tablayout"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="@+id/tablayout" />
 
-
-
-    <androidx.viewpager.widget.ViewPager
+    <androidx.viewpager2.widget.ViewPager2
         android:id="@+id/viewpager"
         android:layout_width="match_parent"
         android:layout_height="0dp"
-        android:layout_weight="1" />
-</LinearLayout>
+        android:layout_marginTop="12dp"
+        android:layout_weight="1"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/tablayout" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 91 - 14
teacher/src/main/res/layout/fragment_homework.xml

@@ -1,34 +1,111 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<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:layout_height="match_parent"
-    android:orientation="vertical">
+    xmlns:tools="http://schemas.android.com/tools"
+    android:paddingTop="10dp"
+    android:layout_height="match_parent">
 
     <TextView
         android:id="@+id/tv_date"
         android:layout_width="wrap_content"
-        android:layout_height="@dimen/dp_50"
-        android:layout_marginLeft="14dp"
+        android:layout_height="0dp"
         android:drawableRight="@drawable/icon_arrow_down"
+        android:drawablePadding="6dp"
+        android:ellipsize="end"
         android:gravity="center"
-        android:drawablePadding="@dimen/dp_6"
-        android:text="2021年9月"
-        android:textColor="@color/black_333"
-        android:textSize="@dimen/sp_14" />
+        android:includeFontPadding="false"
+        android:maxLines="1"
+        android:paddingStart="13dp"
+        android:paddingEnd="8dp"
+        android:text=""
+        tools:text="2024年12月"
+        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_date"
+        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="@string/mine_course_search_tip"
+        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="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"
+            android:id="@+id/recyclerView_list"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:overScrollMode="never"
             android:scrollbars="none" />
     </com.scwang.smart.refresh.layout.SmartRefreshLayout>
-</LinearLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 121 - 66
teacher/src/main/res/layout/layout_item_homework.xml

@@ -1,100 +1,155 @@
 <?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content">
-
-    <androidx.constraintlayout.widget.ConstraintLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="14dp"
-        android:layout_marginTop="12dp"
-        android:layout_marginRight="14dp"
-        android:background="@drawable/bg_white_10dp">
+    android:layout_height="wrap_content"
+    android:layout_marginStart="14dp"
+    android:layout_marginBottom="12dp"
+    android:layout_marginEnd="14dp"
+    android:background="@drawable/bg_white_10dp"
+    android:paddingStart="12dp"
+    android:paddingEnd="12dp"
+    android:paddingBottom="12dp">
 
         <ImageView
-            android:id="@+id/im_clock"
-            android:layout_width="@dimen/dp_16"
-            android:layout_height="@dimen/dp_16"
-            android:layout_marginLeft="11dp"
-            android:layout_marginTop="@dimen/dp_12"
-            android:background="@drawable/icon_clock"
+            android:id="@+id/iv_clock_icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:src="@drawable/icon_clock"
             app:layout_constraintLeft_toLeftOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 
         <TextView
-            android:id="@+id/tv_date"
+            android:id="@+id/tv_time"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginLeft="7dp"
-            android:text="2021/09/17 14:00~15:00"
+            android:layout_marginStart="6dp"
+            android:includeFontPadding="false"
             android:textColor="@color/color_666666"
             android:textSize="@dimen/sp_13"
-            app:layout_constraintBottom_toBottomOf="@+id/im_clock"
-            app:layout_constraintLeft_toRightOf="@+id/im_clock"
-            app:layout_constraintTop_toTopOf="@+id/im_clock" />
-
-        <TextView
-            android:id="@+id/tv_state"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginRight="11dp"
-            android:textColor="@color/color_999999"
-            android:textSize="@dimen/sp_14"
-            app:layout_constraintBottom_toBottomOf="@+id/im_clock"
-            app:layout_constraintRight_toRightOf="parent"
-            app:layout_constraintTop_toTopOf="@+id/im_clock" />
+            app:layout_constraintBottom_toBottomOf="@+id/iv_clock_icon"
+            app:layout_constraintLeft_toRightOf="@+id/iv_clock_icon"
+            app:layout_constraintTop_toTopOf="@+id/iv_clock_icon"
+            tools:text="2021/09/17 14:00~14:25" />
 
         <View
             android:id="@+id/view_line"
-            android:layout_width="match_parent"
+            android:layout_width="0dp"
             android:layout_height="1dp"
-            android:layout_marginLeft="10dp"
-            android:layout_marginTop="10dp"
-            android:layout_marginRight="9dp"
+            android:layout_marginTop="15dp"
             android:background="@color/color_f2f2f2"
-            app:layout_constraintTop_toBottomOf="@+id/im_clock" />
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/iv_clock_icon" />
 
-        <com.cooleshow.base.widgets.QMUIRadiusImageView
-            android:id="@+id/im_header"
-            android:layout_width="@dimen/dp_47"
-            android:layout_height="@dimen/dp_51"
-            android:layout_marginLeft="11dp"
-            android:layout_marginTop="17dp"
-            android:layout_marginBottom="20dp"
-            app:layout_constraintBottom_toBottomOf="parent"
+        <de.hdodenhof.circleimageview.CircleImageView
+            android:src="@drawable/icon_default_head"
+            android:id="@+id/iv_avatar"
+            android:layout_width="40dp"
+            android:layout_height="40dp"
+            android:layout_marginTop="12dp"
             app:layout_constraintLeft_toLeftOf="parent"
             app:layout_constraintTop_toBottomOf="@+id/view_line"
             app:qmui_corner_radius="5dp" />
 
         <TextView
-            android:id="@+id/tv_name"
-            android:layout_width="wrap_content"
+            android:id="@+id/tv_title"
+            android:layout_width="0dp"
             android:layout_height="wrap_content"
-            android:layout_marginLeft="10dp"
-            android:text="张豆豆"
+            android:layout_marginStart="10dp"
+            android:includeFontPadding="false"
             android:textColor="@color/color_1a1a1a"
-            android:textSize="@dimen/sp_16"
-            app:layout_constraintLeft_toRightOf="@+id/im_header"
-            app:layout_constraintTop_toTopOf="@+id/im_header" />
+            android:textSize="@dimen/sp_15"
+            android:maxLines="1"
+            android:ellipsize="end"
+            app:layout_constraintWidth_default="wrap"
+            app:layout_constraintHorizontal_bias="0"
+            app:layout_constraintHorizontal_chainStyle="packed"
+            app:layout_constraintRight_toLeftOf="@+id/iv_attendance_status"
+            app:layout_constraintBottom_toTopOf="@+id/tv_name"
+            app:layout_constraintLeft_toRightOf="@+id/iv_avatar"
+            app:layout_constraintTop_toTopOf="@+id/iv_avatar"
+            app:layout_constraintVertical_chainStyle="packed"
+            tools:text="VIP定制课-张豆豆VIP定制课张豆豆VIP定制课张豆豆VIP定制课-张豆豆" />
+
+        <ImageView
+            tools:visibility="visible"
+            android:visibility="visible"
+            android:layout_marginStart="5dp"
+            android:id="@+id/iv_attendance_status"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintLeft_toRightOf="@+id/tv_title"
+            app:layout_constraintBottom_toBottomOf="@+id/tv_title"
+            app:layout_constraintTop_toTopOf="@+id/tv_title"
+            android:src="@drawable/icon_course_attendance_truancy"
+            android:layout_width="wrap_content"
+            android:layout_marginEnd="5dp"
+            android:adjustViewBounds="true"
+            android:layout_height="17.1dp"/>
+
+        <TextView
+            android:id="@+id/tv_name"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="4dp"
+            android:ellipsize="middle"
+            android:includeFontPadding="false"
+            android:singleLine="true"
+            android:textColor="@color/color_999999"
+            android:textSize="@dimen/sp_13"
+            app:layout_constraintBottom_toBottomOf="@+id/iv_avatar"
+            app:layout_constraintHorizontal_bias="0"
+            app:layout_constraintHorizontal_chainStyle="packed"
+            app:layout_constraintLeft_toLeftOf="@+id/tv_title"
+            app:layout_constraintRight_toLeftOf="@+id/tv_course_name"
+            app:layout_constraintTop_toBottomOf="@+id/tv_title"
+            app:layout_constraintWidth_default="wrap"
+            tools:text="张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆" />
 
         <ImageView
             android:id="@+id/iv_go_chat"
-            android:layout_width="@dimen/dp_19"
-            android:layout_height="@dimen/dp_18"
-            android:layout_marginLeft="5dp"
-            android:background="@drawable/icon_chat_small"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="5dp"
+            android:src="@drawable/icon_chat_small"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="@+id/tv_title"
+            app:layout_constraintLeft_toRightOf="@+id/tv_title"
+            app:layout_constraintTop_toTopOf="@+id/tv_title" />
+
+        <TextView
+            android:id="@+id/tv_course_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="5dp"
+            android:layout_marginEnd="5dp"
+            android:background="@drawable/shape_couse_type_text_bg"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:paddingStart="4dp"
+            android:paddingTop="1.5dp"
+            android:paddingEnd="4dp"
+            android:paddingBottom="1.5dp"
+            android:textColor="@color/color_ff8c00"
+            android:textSize="@dimen/sp_10"
+            app:layout_constraintRight_toRightOf="parent"
             app:layout_constraintBottom_toBottomOf="@+id/tv_name"
             app:layout_constraintLeft_toRightOf="@+id/tv_name"
-            app:layout_constraintTop_toTopOf="@+id/tv_name" />
+            app:layout_constraintTop_toTopOf="@+id/tv_name"
+            tools:text="单簧管" />
+
 
-        <androidx.recyclerview.widget.RecyclerView
-            android:id="@+id/rv_mark"
+        <TextView
+            android:id="@+id/tv_state"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginLeft="10dp"
-            android:visibility="gone"
-            app:layout_constraintBottom_toBottomOf="@+id/im_header"
-            app:layout_constraintLeft_toRightOf="@+id/im_header" />
-    </androidx.constraintlayout.widget.ConstraintLayout>
-</FrameLayout>
+            android:textColor="@color/color_999999"
+            android:textSize="@dimen/sp_14"
+            app:layout_constraintBottom_toTopOf="@+id/view_line"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:text="未开始" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>