罗明文
1 天以前 7bed3f6090b14391d7dad4ca4bd632fb28d847c0
app/src/main/java/com/dollearn/student/ui/home/ChooseVoiceActivity.kt
@@ -8,15 +8,17 @@
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.ui.home.adapter.IndexAdapter
import com.dollearn.student.utils.Const
import com.dollearn.student.utils.event.EmptyEvent
import kotlinx.android.synthetic.main.activity_listen.*
@@ -35,44 +37,89 @@
        intent.getIntExtra("season",0)
    }
    val data by lazy { intent.getParcelableExtra<SubjectBean>("data") }
    private val fragments    = arrayListOf<Fragment>()
    val fragments    = arrayListOf<Fragment>()
    var totalCount = 0 //总答题次数
    var rightCount = 0 //正确答题次数
    var time = 0 //学习秒数
    private var handler: Handler? = null
    val indexList = arrayListOf<SortBean>()
    private val indexAdapter = IndexAdapter(indexList)
    val vp by lazy { view_pager }
    var recoverd = false  //true已经恢复了进度,后续语音可以自动播放
    override fun initClick() {
        tv_last.setOnClickListener {
            (fragments[view_pager.currentItem-1] as ChooseVoiceFragment).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,2).request(this@ChooseVoiceActivity){_,_->
                        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 ChooseVoiceFragment).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 ChooseVoiceFragment).recover()
            }
        }
    }
    fun next(){
        val listenFragment = fragments[view_pager.currentItem] as ChooseVoiceFragment
        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,2,totalCount,rightCount,data!!.data.integral,time,data!!.data.id)
            finish()
        }else{
                if (data!!.subjectList[view_pager.currentItem].filter { it.completed }.size == 4){  //防止多次调用触发
                    (fragments[view_pager.currentItem+1] as ChooseVoiceFragment).recover()
                    view_pager.setCurrentItem(view_pager.currentItem+1,true)
                    (fragments[view_pager.currentItem] as ChooseVoiceFragment).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(ChooseVoiceFragment.getInstance(index))
            }
@@ -100,7 +147,7 @@
                }
                override fun onPageSelected(position: Int) {
                    tv_progress.text = "已完成:${position+1}/${fragments.size}"
                    tv_progress.text = "已完成:%d/%d\n正确率:%.2f%s".format(position+1,fragments.size,accuracy*100,"%")
                }
                override fun onPageScrollStateChanged(state: Int) {
@@ -127,6 +174,8 @@
                tv_last.visible()
            totalCount = data?.answerNumber?:0
            rightCount = data?.correctNumber?:0
            EventBus.getDefault().post(EmptyEvent(Const.EventCode.RECOVERD))
            recoverd = true
        }
    }