From 9904e5f900ba751c1fe719cdf889f00e9f1418e8 Mon Sep 17 00:00:00 2001
From: lmw <125975490@qq.com>
Date: 星期三, 21 五月 2025 14:14:04 +0800
Subject: [PATCH] save

---
 app/src/main/java/com/dollearn/student/ui/home/IncludeActivity.kt |   92 ++++++++++++++++++++++++++++++++++-----------
 1 files changed, 69 insertions(+), 23 deletions(-)

diff --git a/app/src/main/java/com/dollearn/student/ui/home/IncludeActivity.kt b/app/src/main/java/com/dollearn/student/ui/home/IncludeActivity.kt
index e8abb61..fec15a7 100644
--- a/app/src/main/java/com/dollearn/student/ui/home/IncludeActivity.kt
+++ b/app/src/main/java/com/dollearn/student/ui/home/IncludeActivity.kt
@@ -8,16 +8,19 @@
 import androidx.core.os.bundleOf
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.FragmentPagerAdapter
+import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.viewpager.widget.ViewPager
 import cn.sinata.xldutils.gone
 import cn.sinata.xldutils.visible
 import com.dollearn.student.R
 import com.dollearn.student.dialog.TipDialog
 import com.dollearn.student.network.HttpManager
+import com.dollearn.student.network.entity.SortBean
 import com.dollearn.student.network.entity.Subject
 import com.dollearn.student.network.entity.SubjectBean
 import com.dollearn.student.network.request
 import com.dollearn.student.ui.TransparentStatusBarActivity
+import com.dollearn.student.ui.home.adapter.IndexAdapter
 import com.dollearn.student.utils.Const
 import com.dollearn.student.utils.event.EmptyEvent
 import kotlinx.android.synthetic.main.activity_listen.*
@@ -43,37 +46,96 @@
     var time = 0 //学习秒数
     private var handler:Handler? = null
 
+    val indexList = arrayListOf<SortBean>()
+    private val indexAdapter = IndexAdapter(indexList)
+
     override fun initClick() {
         tv_last.setOnClickListener {
-            (fragments[view_pager.currentItem-1] as IncludeFragment).recover()
-            view_pager.setCurrentItem(view_pager.currentItem-1,true)
-            if (view_pager.currentItem == 0)
-                tv_last.gone()
+            val tipDialog = TipDialog()
+            tipDialog.arguments = bundleOf("msg" to "是否重新开始答题?确认后将清空当前答题进度")
+            tipDialog.setCallback(object :TipDialog.OnClickCallback{
+                override fun onOk() {
+                    showDialog()
+                    HttpManager.restart(day,week,3).request(this@IncludeActivity){_,_->
+                        totalCount = 0 //总答题次数
+                        rightCount = 0 //正确答题次数
+                        time = 0 //学习秒数
+                        indexList.forEach { it.status = 1 }
+                        indexAdapter.notifyDataSetChanged()
+                        data?.accuracy = 0.0
+                        view_pager.setCurrentItem(0,false)
+                        (fragments[0] as IncludeFragment).recover()
+                    }
+                }
+
+                override fun onCancel() {
+                }
+            })
+            tipDialog.show(supportFragmentManager,"restart")
         }
 
         tv_exit.setOnClickListener {
             onBackPressed()
         }
+
+
+        indexAdapter.setOnItemClickListener { view, position ->
+            val sortBean = indexList[position]
+            if (position!=view_pager.currentItem&&(sortBean.status!=1||position == indexList.indexOf(indexList.first { it.status == 1 }))){
+                view_pager.setCurrentItem(position,false)
+                (fragments[position] as IncludeFragment).recover()
+            }
+        }
     }
 
     fun next(){
+        val listenFragment = fragments[view_pager.currentItem] as IncludeFragment
+        val sortBean = indexList[view_pager.currentItem]
+        sortBean.status = if (listenFragment.right) 2 else 3 //修改本地答题结果,并上传服务器
+        HttpManager.answerQuestion(sortBean).request(this){_,data->
+            //保存成功
+        }
+        val filter = indexList.filter { it.status != 1 }
+        data?.accuracy = filter.filter { it.status == 2 }.size.toDouble() / filter.size
         if (view_pager.currentItem == fragments.lastIndex){
             handler?.removeMessages(0)
             ResultActivity.startResult(this,day,week,season,3,totalCount,rightCount,data!!.data.integral,time,data!!.data.id)
             finish()
         }else{
-            (fragments[view_pager.currentItem+1] as IncludeFragment).recover()
             view_pager.setCurrentItem(view_pager.currentItem+1,true)
+            (fragments[view_pager.currentItem+1] as IncludeFragment).recover()
             tv_last.visible()
+            indexAdapter.notifyDataSetChanged()
         }
     }
 
     override fun initView() {
+        rv_index.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false)
+        rv_index.adapter = indexAdapter
         data?.apply {
-            tv_progress.text = "已完成:1/${subjectList.size}"
+            tv_progress.text = "已完成:1/%d\n正确率:%.2f%s".format(subjectList.size,accuracy*100,"%")
+            indexList.clear()
+            indexList.addAll(list)
+            indexAdapter.notifyDataSetChanged()
             subjectList.forEachIndexed { index, subject ->
                 fragments.add(IncludeFragment.getInstance(index))
             }
+        }
+        recover()
+        handler= object :Handler(Looper.myLooper()!!){
+            override fun handleMessage(msg: Message) {
+                super.handleMessage(msg)
+                if (msg.what == 0){
+                    time++
+                    handler?.sendEmptyMessageDelayed(0,1000L)
+                }
+            }
+        }
+        handler?.sendEmptyMessageDelayed(0,1000L)
+    }
+
+    private fun recover(){
+        HttpManager.teamSchedule(day,week,3).request(this){_,data->
             view_pager.adapter = @SuppressLint("WrongConstant")
             object : FragmentPagerAdapter(supportFragmentManager,0) {
                 override fun getItem(p0: Int): Fragment {
@@ -98,28 +160,12 @@
                 }
 
                 override fun onPageSelected(position: Int) {
-                    tv_progress.text = "已完成:${position+1}/${subjectList.size}"
+                    tv_progress.text = "已完成:%d/%d\n正确率:%.2f%s".format(position+1,this@IncludeActivity.data!!.subjectList.size,this@IncludeActivity.data!!.accuracy*100,"%")
                 }
 
                 override fun onPageScrollStateChanged(state: Int) {
                 }
             })
-        }
-        recover()
-        handler= object :Handler(Looper.myLooper()!!){
-            override fun handleMessage(msg: Message) {
-                super.handleMessage(msg)
-                if (msg.what == 0){
-                    time++
-                    handler?.sendEmptyMessageDelayed(0,1000L)
-                }
-            }
-        }
-        handler?.sendEmptyMessageDelayed(0,1000L)
-    }
-
-    private fun recover(){
-        HttpManager.teamSchedule(day,week,3).request(this){_,data->
             view_pager.setCurrentItem((data?.schedule?:1)-1,false)
             if (view_pager.currentItem != 0)
                 tv_last.visible()

--
Gitblit v1.7.1