From 442124baa483f8d1c4aaca7ff81e15dd3f122363 Mon Sep 17 00:00:00 2001 From: 罗明文 <125975490@qq.com> Date: 星期四, 22 五月 2025 13:14:36 +0800 Subject: [PATCH] save --- app/src/main/java/com/dollearn/student/ui/home/ListenActivity.kt | 140 ++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 127 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/dollearn/student/ui/home/ListenActivity.kt b/app/src/main/java/com/dollearn/student/ui/home/ListenActivity.kt index 0b5efba..5699142 100644 --- a/app/src/main/java/com/dollearn/student/ui/home/ListenActivity.kt +++ b/app/src/main/java/com/dollearn/student/ui/home/ListenActivity.kt @@ -2,51 +2,134 @@ import android.annotation.SuppressLint import android.os.Handler +import android.os.Looper import android.os.Message import android.view.ViewGroup 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.SubjectBean +import com.dollearn.student.network.request import com.dollearn.student.ui.TransparentStatusBarActivity -import com.dollearn.student.utils.AudioUtils +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.* +import org.greenrobot.eventbus.EventBus class ListenActivity:TransparentStatusBarActivity() { override fun setContentView() = R.layout.activity_listen + private val day by lazy { + intent.getIntExtra("day",0) + } + private val week by lazy { + intent.getIntExtra("week",0) + } + private val season by lazy { + intent.getIntExtra("season",0) + } val data by lazy { intent.getParcelableExtra<SubjectBean>("data") } - private val fragments = arrayListOf<Fragment>() + val fragments = arrayListOf<Fragment>() + val viewPager by lazy { view_pager } + + var totalCount = 0 //总答题次数 + var rightCount = 0 //正确答题次数 + 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 ListenFragment).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,1).request(this@ListenActivity){_,_-> + totalCount = 0 //总答题次数 + rightCount = 0 //正确答题次数 + time = 0 //学习秒数 + data!!.list.forEach { it.status = 1 } + data!!.accuracy = 0.0 + indexList.forEach { it.status = 1 } + indexAdapter.notifyDataSetChanged() + data?.accuracy = 0.0 + (fragments[0] as ListenFragment).recover() + view_pager.setCurrentItem(0,false) + } + } + + override fun onCancel() { + } + }) + tipDialog.show(supportFragmentManager,"restart") } tv_exit.setOnClickListener { onBackPressed() } + + indexAdapter.setOnItemClickListener { view, position -> + val sortBean = indexList[position] + if (position!=viewPager.currentItem/4&&(sortBean.status!=1||position == indexList.indexOf(indexList.first { it.status == 1 }))){ + (fragments[position*4] as ListenFragment).recover() + view_pager.setCurrentItem(position*4,false) + } + } } fun next(){ - (fragments[view_pager.currentItem+1] as ListenFragment).recover() - view_pager.setCurrentItem(view_pager.currentItem+1,true) - tv_last.visible() + val listenFragment = fragments[viewPager.currentItem] as ListenFragment + val sortBean = data!!.list[viewPager.currentItem] + sortBean.status = if (listenFragment.right) 2 else 3 //修改本地答题结果,并上传服务器 + HttpManager.answerQuestion(sortBean).request(this){_,data-> + //保存成功 + } + indexList.clear() + (data!!.subjectList.indices).forEach { + val subList = data!!.list.subList(it * 4, it * 4 + 4) + val status = if (subList.filter { it.status!=1 }.size != 4) 1 else if (subList.filter { it.status==2 }.size == 4) 2 else 3 + indexList.add(SortBean("",status)) + } + val filter = indexList.filter { it.status != 1 } + data?.accuracy = if (filter.isEmpty()) 0.0 else filter.filter { it.status == 2 }.size.toDouble() / filter.size + if (view_pager.currentItem == fragments.lastIndex){ + handler?.removeMessages(0) + ResultActivity.startResult(this,day,week,season,1,totalCount,rightCount,data!!.data.integral,time,data!!.data.id) + finish() + }else{ + val i = view_pager.currentItem + 1 + (fragments[i] as ListenFragment).recover() + view_pager.setCurrentItem(i,i%4 == 0) + tv_last.visible() + indexAdapter.notifyDataSetChanged() + } } override fun initView() { + rv_index.layoutManager = LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false) + rv_index.adapter = indexAdapter data?.apply { val flatMap = subjectList?.flatMap { it } - tv_progress.text = "已完成:1/${flatMap.size}" + tv_progress.text = "已完成:1/%d\n正确率:%.2f%s".format(subjectList.size,accuracy*100,"%") + indexList.clear() + (subjectList.indices).forEach { + val subList = list.subList(it * 4, it * 4 + 4) + val status = if (subList.filter { it.status!=1 }.size != 4) 1 else if (subList.filter { it.status==2 }.size == 4) 2 else 3 + indexList.add(SortBean("",status)) + } + indexAdapter.notifyDataSetChanged() flatMap.forEachIndexed { index, subject -> fragments.add(ListenFragment.getInstance(index/4,index%4)) } @@ -63,7 +146,7 @@ override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { } } - view_pager.offscreenPageLimit = fragments.size + view_pager.offscreenPageLimit = 8 view_pager.addOnPageChangeListener(object :ViewPager.OnPageChangeListener{ override fun onPageScrolled( position: Int, @@ -74,12 +157,33 @@ } override fun onPageSelected(position: Int) { - tv_progress.text = "已完成:${position+1}/${flatMap.size}" + tv_progress.text = "已完成:%d/%d\n正确率:%.2f%s".format(position/4+1,subjectList.size,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,1).request(this){_,data-> + view_pager.setCurrentItem((data?.schedule?:1)-1,false) + if (view_pager.currentItem != 0) + tv_last.visible() + totalCount = data?.answerNumber?:0 + rightCount = data?.correctNumber?:0 } } @@ -88,7 +192,10 @@ tipDialog.arguments = bundleOf("msg" to "未完成全部答题,确认退出吗?") tipDialog.setCallback(object :TipDialog.OnClickCallback{ override fun onOk() { -// HttpManager.exitLearning() + val list = (data?.subjectList?: arrayListOf()).flatMap { it }.subList(0,view_pager.currentItem) + HttpManager.exitLearning(view_pager.currentItem,season,time,totalCount,rightCount,day,week,1,data?.data?.id?:"", list.joinToString(",") { it.id }).request(this@ListenActivity){_,_-> + finish() + } } override fun onCancel() { @@ -96,4 +203,11 @@ }) tipDialog.show(supportFragmentManager,"exit") } + + override fun onDestroy() { + super.onDestroy() + handler?.removeMessages(0) + handler = null + EventBus.getDefault().post(EmptyEvent(Const.EventCode.STOP_TIMER)) + } } -- Gitblit v1.7.1