| tv2.text = "学习进度" | tv2.text = "学习进度" | ||||
| tv2Value.text = "${NumberUtils.formatHalfUp(it.beforeTestScore, "0.#")}%" | tv2Value.text = "${NumberUtils.formatHalfUp(it.beforeTestScore, "0.#")}%" | ||||
| tv3.setHtml( | tv3.setHtml( | ||||
| "<font color=\"#323232\">条目-</font><font color=\"#40A540\">正确</font>|<font color=\"#F26255\">错误</font>") | |||||
| "<font color=\"#323232\">条目-</font><font color=\"#40A540\">正确</font> | <font color=\"#F26255\">错误</font>") | |||||
| tv3Value.setHtml( | tv3Value.setHtml( | ||||
| "<font color=\"#323232\">${it.totalNumber}-</font><font color=\"#40A540\">${it.correctNumber}</font>|<font color=\"#F26255\">${it.errorNumber}</font>") | |||||
| "<font color=\"#323232\">${it.totalNumber}-</font><font color=\"#40A540\">${it.correctNumber}</font> | <font color=\"#F26255\">${it.errorNumber}</font>") | |||||
| tv4.text = "知识点测试" | tv4.text = "知识点测试" | ||||
| if (it.afterTestScore != AppConstants.NOT_DOING) { | if (it.afterTestScore != AppConstants.NOT_DOING) { | ||||
| it.afterTestScore.toInt().let { | it.afterTestScore.toInt().let { |
| mutableList.add(lesson) | mutableList.add(lesson) | ||||
| positionIndex += 1 | positionIndex += 1 | ||||
| // TODO: 2022/5/9 对课时数量进行限制,课时太多,开发人员不好进行测试 | // TODO: 2022/5/9 对课时数量进行限制,课时太多,开发人员不好进行测试 | ||||
| val needBreak = when (base.coursePackType) { | |||||
| AppConstants.COURSEPACK_TYPE_CHINESE_COMPOSITION -> positionIndex == 10 //保留十个课时 | |||||
| AppConstants.COURSEPACK_TYPE_ENGLISH_SPOKEN -> positionIndex == 6 //保留六个课时 | |||||
| else -> positionIndex == 3 //保留三个课时 | |||||
| } | |||||
| if (needBreak) { | |||||
| break | |||||
| } | |||||
| // val needBreak = when (base.coursePackType) { | |||||
| // AppConstants.COURSEPACK_TYPE_CHINESE_COMPOSITION -> positionIndex == 10 //保留十个课时 | |||||
| // AppConstants.COURSEPACK_TYPE_ENGLISH_SPOKEN -> positionIndex == 6 //保留六个课时 | |||||
| // else -> positionIndex == 3 //保留三个课时 | |||||
| // } | |||||
| // if (needBreak) { | |||||
| // break | |||||
| // } | |||||
| } | } | ||||
| it.close() | it.close() | ||||
| } | } |
| import com.github.mikephil.charting.data.BarEntry | import com.github.mikephil.charting.data.BarEntry | ||||
| import com.github.mikephil.charting.formatter.ValueFormatter | import com.github.mikephil.charting.formatter.ValueFormatter | ||||
| import com.lxj.xpopup.XPopup | import com.lxj.xpopup.XPopup | ||||
| import com.lxj.xpopup.enums.PopupPosition | |||||
| import com.lxj.xpopup.interfaces.OnSelectListener | |||||
| import com.suliang.common.base.activity.BaseActivityVM | import com.suliang.common.base.activity.BaseActivityVM | ||||
| import com.suliang.common.extension.click | import com.suliang.common.extension.click | ||||
| import com.suliang.common.extension.setHtml | import com.suliang.common.extension.setHtml | ||||
| override fun initActivity(savedInstanceState : Bundle?) { | override fun initActivity(savedInstanceState : Bundle?) { | ||||
| binding.titleBar.onBackClick = { _ -> finish() } | binding.titleBar.onBackClick = { _ -> finish() } | ||||
| binding.course = vm.currentStatisCourse | binding.course = vm.currentStatisCourse | ||||
| initChart() | initChart() | ||||
| binding.rvChapterInfo.apply { | binding.rvChapterInfo.apply { | ||||
| if (vm.statisticsCourseList.size <= 1){ | if (vm.statisticsCourseList.size <= 1){ | ||||
| binding.ivChangeCourse.visibility = View.INVISIBLE | binding.ivChangeCourse.visibility = View.INVISIBLE | ||||
| }else{ | }else{ | ||||
| // TODO: 2022/7/1 弹窗实例失败 | |||||
| //课程切换弹窗 | //课程切换弹窗 | ||||
| binding.ivChangeCourse.click { | binding.ivChangeCourse.click { | ||||
| if (!this::pupCourseChangeView.isInitialized){ | if (!this::pupCourseChangeView.isInitialized){ | ||||
| pupCourseChangeView = StatisticsICourseChangePopup(this).apply { | pupCourseChangeView = StatisticsICourseChangePopup(this).apply { | ||||
| data = vm.statisticsCourseList | |||||
| checkPostion = vm.checkedPosition | checkPostion = vm.checkedPosition | ||||
| onAdapterItemClick = { position,item -> | onAdapterItemClick = { position,item -> | ||||
| vm.checkedPosition = position | vm.checkedPosition = position | ||||
| vm.currentStatisCourse = item | vm.currentStatisCourse = item | ||||
| binding.course = item | |||||
| loadData() | loadData() | ||||
| } | } | ||||
| data = vm.statisticsCourseList | |||||
| } | } | ||||
| } | } | ||||
| XPopup.Builder(this).asCustom(pupCourseChangeView).show() | XPopup.Builder(this).asCustom(pupCourseChangeView).show() | ||||
| } | } | ||||
| //根据生成的数据,进行选择器的实现 | //根据生成的数据,进行选择器的实现 | ||||
| when(vm.chapterList.size){ | when(vm.chapterList.size){ | ||||
| 0,1 -> binding.tvChapterChoose.visibility = View.GONE | |||||
| 0,1 -> { | |||||
| binding.tvChapterChoose.visibility = View.GONE | |||||
| binding.tvChapterChoose.click { null } | |||||
| } | |||||
| else -> binding.tvChapterChoose.visibility = if(vm.chapterList[0].size > 0){ | else -> binding.tvChapterChoose.visibility = if(vm.chapterList[0].size > 0){ | ||||
| binding.tvChapterChoose.text = vm.chapterList[0][0].chapterName | binding.tvChapterChoose.text = vm.chapterList[0][0].chapterName | ||||
| binding.tvChapterChoose.click { | |||||
| XPopup.Builder(this) | |||||
| .atView(binding.tvChapterChoose) | |||||
| .hasShadowBg(false) | |||||
| .hasStatusBar(true) | |||||
| .isLightStatusBar(true) | |||||
| .asAttachList(vm.chapterList.map { | |||||
| it[0].chapterName | |||||
| }.toTypedArray(), intArrayOf(), { position, text -> | |||||
| binding.tvChapterChoose.text = text | |||||
| vm.rvChapterChangeLiveData.value = position | |||||
| },0, R.layout.item_xpopup_statistics_choose_subject).show() | |||||
| } | |||||
| View.VISIBLE | View.VISIBLE | ||||
| }else { | }else { | ||||
| View.GONE | View.GONE |
| override fun loadData() { | override fun loadData() { | ||||
| val coursePackList = CourseManager.subjectWithCoursePackMap.get(projectId) | val coursePackList = CourseManager.subjectWithCoursePackMap.get(projectId) | ||||
| if (coursePackList.isNullOrEmpty()){ | if (coursePackList.isNullOrEmpty()){ | ||||
| adapter.needShowEmptyView = true | |||||
| adapter.setData(emptyList<StatisticsCourse>().toMutableList()) | adapter.setData(emptyList<StatisticsCourse>().toMutableList()) | ||||
| }else{ | }else{ | ||||
| //组合统计课程实体病设置进度值 | //组合统计课程实体病设置进度值 | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| adapter.needShowEmptyView = statisticsCourseList.size == 0 | |||||
| //设置列表数据 | //设置列表数据 | ||||
| adapter.setData(statisticsCourseList) | adapter.setData(statisticsCourseList) | ||||
| } | } |
| checkPosition = checkPostion | checkPosition = checkPostion | ||||
| onItemClick = {_,p,item -> | onItemClick = {_,p,item -> | ||||
| if (this@StatisticsICourseChangePopup::onAdapterItemClick.isInitialized){ | if (this@StatisticsICourseChangePopup::onAdapterItemClick.isInitialized){ | ||||
| dismiss() | |||||
| onAdapterItemClick.invoke(p,item) | onAdapterItemClick.invoke(p,item) | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| // TODO: 2022/7/1 适配器inflate 失败 | |||||
| internal class Adapter : BaseRVAdapter<StatisticsCourse>(){ | internal class Adapter : BaseRVAdapter<StatisticsCourse>(){ | ||||
| var checkPosition = 0 | var checkPosition = 0 | ||||
| } | } | ||||
| when(position){ | when(position){ | ||||
| checkPosition -> { | checkPosition -> { | ||||
| layout.setBackgroundColor(Color.parseColor("0D5082E6")) | |||||
| layout.setBackgroundColor(Color.parseColor("#0D5082E6")) | |||||
| tvName.setTextColor(ContextCompat.getColor(context,R.color.theme_color)) | tvName.setTextColor(ContextCompat.getColor(context,R.color.theme_color)) | ||||
| tvValue.setTextColor(ContextCompat.getColor(context,R.color.theme_color)) | tvValue.setTextColor(ContextCompat.getColor(context,R.color.theme_color)) | ||||
| } | } | ||||
| } | } | ||||
| holder.binding.root.click { | holder.binding.root.click { | ||||
| if (checkPosition != position){ | if (checkPosition != position){ | ||||
| checkPosition = position | |||||
| notifyDataSetChanged() | notifyDataSetChanged() | ||||
| if (onItemClickIsInitialized()){ | if (onItemClickIsInitialized()){ | ||||
| onItemClick.invoke(it,position,getItem(position)) | onItemClick.invoke(it,position,getItem(position)) |
| <androidx.constraintlayout.widget.ConstraintLayout | <androidx.constraintlayout.widget.ConstraintLayout | ||||
| android:id="@+id/layout_chapter_info" | android:id="@+id/layout_chapter_info" | ||||
| android:layout_width="0dp" | android:layout_width="0dp" | ||||
| android:layout_height="wrap_content" | |||||
| android:layout_height="match_parent" | |||||
| android:layout_marginTop="12dp" | android:layout_marginTop="12dp" | ||||
| android:background="@drawable/shape_rounder_12_white" | android:background="@drawable/shape_rounder_12_white" | ||||
| android:padding="12dp" | android:padding="12dp" | ||||
| <androidx.recyclerview.widget.RecyclerView | <androidx.recyclerview.widget.RecyclerView | ||||
| android:id="@+id/rv_chapter_info" | android:id="@+id/rv_chapter_info" | ||||
| android:layout_width="0dp" | android:layout_width="0dp" | ||||
| android:layout_height="wrap_content" | |||||
| android:layout_height="match_parent" | |||||
| app:layout_constraintStart_toStartOf="parent" | app:layout_constraintStart_toStartOf="parent" | ||||
| app:layout_constraintEnd_toEndOf="parent" | app:layout_constraintEnd_toEndOf="parent" | ||||
| app:layout_constraintTop_toBottomOf="@+id/tv_chapter_info_flag" | app:layout_constraintTop_toBottomOf="@+id/tv_chapter_info_flag" |
| android:id="@+id/rv_course" | android:id="@+id/rv_course" | ||||
| android:layout_width="match_parent" | android:layout_width="match_parent" | ||||
| android:layout_height="0dp" | android:layout_height="0dp" | ||||
| android:layout_weight="1" /> | |||||
| android:layout_weight="1" | |||||
| android:paddingBottom="12dp"/> | |||||
| </androidx.appcompat.widget.LinearLayoutCompat> | </androidx.appcompat.widget.LinearLayoutCompat> | ||||
| </androidx.constraintlayout.widget.ConstraintLayout> | </androidx.constraintlayout.widget.ConstraintLayout> |
| <androidx.constraintlayout.widget.ConstraintLayout | <androidx.constraintlayout.widget.ConstraintLayout | ||||
| android:layout_width="match_parent" | android:layout_width="match_parent" | ||||
| android:layout_height="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:background="@drawable/shape_rounder_toplr_24_white"> | android:background="@drawable/shape_rounder_toplr_24_white"> | ||||
| <TextView | <TextView |
| <androidx.constraintlayout.widget.ConstraintLayout | <androidx.constraintlayout.widget.ConstraintLayout | ||||
| android:layout_width="match_parent" | android:layout_width="match_parent" | ||||
| android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
| android:background="@drawable/shape_rounder_8_stroke_gray1"> | |||||
| android:background="@drawable/shape_rounder_8_stroke_gray1" | |||||
| android:layout_marginTop="6dp"> | |||||
| <View | <View | ||||
| android:id="@+id/v_1" | android:id="@+id/v_1" |