Bläddra i källkod

1.添加获取moca试题库module

王鹏鹏 2 år sedan
förälder
incheckning
155e492e0e

+ 81 - 1
moca/src/main/java/com/yingyangfly/moca/listenspeak/ListenSpeakFragment.kt

@@ -1,18 +1,98 @@
 package com.yingyangfly.moca.listenspeak
 
+import android.os.Bundle
+import androidx.core.os.bundleOf
+import androidx.navigation.Navigation
+import com.yingyang.moca.R
 import com.yingyang.moca.databinding.FragmentListenSpeakBinding
 import com.yingyangfly.baselib.base.BaseFragment
+import com.yingyangfly.baselib.db.QuestionsBean
+import com.yingyangfly.baselib.ext.setOnSingleClickListener
+import com.yingyangfly.baselib.voice.PlayVoice
 
 class ListenSpeakFragment : BaseFragment<FragmentListenSpeakBinding>() {
-    override fun initViews() {
 
+    /**
+     * 问题id
+     */
+    private var questionId = 0
+    private var playVoice: PlayVoice? = null
+    private var questionsBean: QuestionsBean? = null
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        questionId = arguments?.getInt("questionId") ?: 57
+        super.onCreate(savedInstanceState)
+    }
+
+    override fun initViews() {
+        playVoice = PlayVoice()
+        playVoice?.setContext(mContext)
     }
 
     override fun initListener() {
+        binding {
+            btnPrevious.setOnSingleClickListener {
+                if (questionId == 57) {
+                    val controller = Navigation.findNavController(it)
+                    val bundle = bundleOf("questionId" to 52)
+                    controller.navigate(
+                        R.id.action_listenSpeakFragment_to_computationFragment,
+                        bundle
+                    )
+                } else {
+                    val controller = Navigation.findNavController(it)
+                    val bundle = bundleOf("questionId" to 57)
+                    controller.navigate(
+                        R.id.action_listenSpeakFragment_to_listenSpeakResultFragment,
+                        bundle
+                    )
+                }
+            }
+
+            btnNext.setOnSingleClickListener {
+                val controller = Navigation.findNavController(it)
+                val bundle = bundleOf("questionId" to questionId)
+                controller.navigate(
+                    R.id.action_listenSpeakFragment_to_listenSpeakResultFragment,
+                    bundle
+                )
+            }
 
+            imagePlay.setOnSingleClickListener {
+                if (questionsBean != null) {
+                    playVoice?.speak(questionsBean?.reviewDesc!!)
+                }
+            }
+        }
     }
 
     override fun initData() {
 
     }
+
+    override fun onResume() {
+        super.onResume()
+        loadData()
+    }
+
+    /**
+     * 加载数据
+     */
+    private fun loadData() {
+        binding.tvTitle.text = if (questionId == 57) {
+            "接下来将给您听一句话,请仔细听,听完后请您一字不差地说出这句话,请听题"
+        } else {
+            "下面将再给您听一遍刚才的几个词,请您仔细听并努力记住这些词,等一下要问您,请听题"
+        }
+        if (dao != null) {
+            questionsBean = dao?.getQuestion(questionId)
+        }
+    }
+
+    override fun onPause() {
+        super.onPause()
+        if (playVoice != null) {
+            playVoice?.stop()
+        }
+    }
 }

+ 93 - 1
moca/src/main/java/com/yingyangfly/moca/listenspeak/ListenSpeakResultFragment.kt

@@ -1,18 +1,110 @@
 package com.yingyangfly.moca.listenspeak
 
+import android.os.Bundle
+import androidx.core.os.bundleOf
+import androidx.navigation.Navigation
+import com.yingyang.moca.R
 import com.yingyang.moca.databinding.FragmentListenSpeakResultBinding
 import com.yingyangfly.baselib.base.BaseFragment
+import com.yingyangfly.baselib.db.QuestionsBean
+import com.yingyangfly.baselib.ext.setOnSingleClickListener
+import com.yingyangfly.baselib.ext.toast
+import com.yingyangfly.moca.adapter.ChoiceAdapter
 
 class ListenSpeakResultFragment : BaseFragment<FragmentListenSpeakResultBinding>() {
-    override fun initViews() {
 
+    /**
+     * 问题id
+     */
+    private var questionId = 0
+    private val choiceItemList = mutableListOf<QuestionsBean>()
+    private val adapter by lazy { ChoiceAdapter() }
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        questionId = arguments?.getInt("questionId") ?: 57
+        super.onCreate(savedInstanceState)
+    }
+
+    override fun initViews() {
+        binding {
+            rvChoice.adapter = adapter
+            adapter.onNumClickListener = {
+                if (dao != null) {
+                    dao?.update(it)
+                }
+            }
+        }
     }
 
     override fun initListener() {
+        binding {
+            btnPrevious.setOnSingleClickListener {
+                val controller = Navigation.findNavController(it)
+                if (questionId == 57) {
+                    val bundle = bundleOf("questionId" to questionId)
+                    controller.navigate(
+                        R.id.action_listenSpeakResultFragment_to_listenSpeakFragment,
+                        bundle
+                    )
+                } else {
+                    val bundle = bundleOf("questionId" to 57)
+                    controller.navigate(
+                        R.id.action_listenSpeakResultFragment_to_listenSpeakFragment,
+                        bundle
+                    )
+                }
+            }
 
+            btnNext.setOnSingleClickListener {
+                if (questionId == 57) {
+                    val controller = Navigation.findNavController(it)
+                    val bundle = bundleOf("questionId" to 58)
+                    controller.navigate(
+                        R.id.action_listenSpeakResultFragment_to_listenSpeakFragment,
+                        bundle
+                    )
+                } else {
+                    "下一页".toast()
+                }
+            }
+        }
     }
 
     override fun initData() {
 
     }
+
+    override fun onResume() {
+        super.onResume()
+        loadData()
+    }
+
+    /**
+     * 加载数据
+     */
+    private fun loadData() {
+        choiceItemList.clear()
+        if (dao != null) {
+            val firstquestion = dao?.getQuestion(questionId)
+            if (firstquestion != null) {
+                choiceItemList.add(firstquestion)
+            }
+        }
+        adapter.setData(choiceItemList)
+    }
+
+    /**
+     * 非空判断
+     */
+    private fun judge(): Boolean {
+        if (choiceItemList.isNullOrEmpty().not()) {
+            choiceItemList.forEach {
+                if (it.inputString.isNullOrEmpty()) {
+                    "请判断答案是否正确".toast()
+                    return false
+                }
+            }
+        }
+        return true
+    }
 }

+ 68 - 1
moca/src/main/res/layout/fragment_listen_speak.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <layout 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"
     tools:ignore="ResourceName">
 
@@ -7,7 +8,73 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent">
 
+        <TextView
+            android:id="@+id/tvTitle"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/divider_202px"
+            android:layout_marginTop="@dimen/divider_27px"
+            android:layout_marginEnd="@dimen/divider_200px"
+            android:gravity="center"
+            android:text="@string/please_listen_carefully_after_listening_please_say_this_sentence_word_for_word"
+            android:textColor="@color/color_FF222222"
+            android:textSize="@dimen/divider_34px"
+            android:textStyle="bold"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
 
-    </androidx.constraintlayout.widget.ConstraintLayout>
+        <androidx.appcompat.widget.AppCompatImageView
+            android:id="@+id/imagePlay"
+            android:layout_width="@dimen/divider_154px"
+            android:layout_height="@dimen/divider_154px"
+            android:layout_marginTop="@dimen/divider_56px"
+            android:background="@mipmap/icon_play_sound"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/tvTitle" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/divider_20px"
+            android:text="@string/click_play"
+            android:textColor="@color/color_FF222222"
+            android:textSize="@dimen/divider_28px"
+            android:textStyle="bold"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/imagePlay" />
+
+        <androidx.appcompat.widget.AppCompatButton
+            android:id="@+id/btnPrevious"
+            android:layout_width="@dimen/divider_240px"
+            android:layout_height="@dimen/divider_68px"
+            android:layout_marginStart="@dimen/divider_307px"
+            android:layout_marginBottom="@dimen/divider_60px"
+            android:background="@drawable/bg_previous_question"
+            android:gravity="center"
+            android:text="@string/previous_page"
+            android:textColor="@color/color_FF4A76FF"
+            android:textSize="@dimen/divider_28px"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent" />
 
+        <androidx.appcompat.widget.AppCompatButton
+            android:id="@+id/btnNext"
+            android:layout_width="@dimen/divider_240px"
+            android:layout_height="@dimen/divider_68px"
+            android:layout_marginEnd="@dimen/divider_305px"
+            android:layout_marginBottom="@dimen/divider_60px"
+            android:background="@drawable/bg_next_question"
+            android:gravity="center"
+            android:text="@string/continues"
+            android:textColor="@android:color/white"
+            android:textSize="@dimen/divider_28px"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
 </layout>

+ 106 - 0
moca/src/main/res/layout/fragment_listen_speak_result.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <layout 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"
     tools:ignore="ResourceName">
 
@@ -7,6 +8,111 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent">
 
+        <TextView
+            android:id="@+id/tvTitle"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/divider_202px"
+            android:layout_marginTop="@dimen/divider_53px"
+            android:layout_marginEnd="@dimen/divider_200px"
+            android:gravity="center"
+            android:text="@string/please_say_words_you_just_heard"
+            android:textColor="@color/color_FF222222"
+            android:textSize="@dimen/divider_34px"
+            android:textStyle="bold"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <com.google.android.material.card.MaterialCardView
+            android:id="@+id/contentLayout"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/divider_32px"
+            android:minWidth="@dimen/divider_620px"
+            android:minHeight="@dimen/divider_264px"
+            android:theme="@style/Theme.MaterialComponents.NoActionBar"
+            app:cardBackgroundColor="@android:color/white"
+            app:cardCornerRadius="@dimen/divider_20px"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/tvTitle"
+            app:strokeColor="@color/color_FF979797"
+            app:strokeWidth="@dimen/divider_1px">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:gravity="center_vertical"
+                android:orientation="horizontal">
+
+                <LinearLayout
+                    android:layout_width="@dimen/divider_191px"
+                    android:layout_height="match_parent"
+                    android:background="@color/color_FF4A76FF"
+                    android:gravity="center"
+                    android:orientation="vertical">
+
+                    <androidx.appcompat.widget.AppCompatImageView
+                        android:layout_width="@dimen/divider_65px"
+                        android:layout_height="@dimen/divider_86px"
+                        android:layout_gravity="center"
+                        android:background="@mipmap/icon_doctor_head" />
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:id="@+id/tvYear"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="@dimen/divider_31px"
+                        android:background="@color/color_FF4A76FF"
+                        android:gravity="center_horizontal"
+                        android:text="@string/staff_judgment"
+                        android:textColor="@android:color/white"
+                        android:textSize="@dimen/divider_24px" />
+
+                </LinearLayout>
+
+                <androidx.recyclerview.widget.RecyclerView
+                    android:id="@+id/rvChoice"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_marginTop="@dimen/divider_15px"
+                    android:layout_marginBottom="@dimen/divider_23px"
+                    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
+
+            </LinearLayout>
+        </com.google.android.material.card.MaterialCardView>
+
+        <androidx.appcompat.widget.AppCompatButton
+            android:id="@+id/btnPrevious"
+            android:layout_width="@dimen/divider_240px"
+            android:layout_height="@dimen/divider_68px"
+            android:layout_marginStart="@dimen/divider_307px"
+            android:layout_marginBottom="@dimen/divider_60px"
+            android:background="@drawable/bg_previous_question"
+            android:gravity="center"
+            android:text="@string/previous_page"
+            android:textColor="@color/color_FF4A76FF"
+            android:textSize="@dimen/divider_28px"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent" />
+
+        <androidx.appcompat.widget.AppCompatButton
+            android:id="@+id/btnNext"
+            android:layout_width="@dimen/divider_240px"
+            android:layout_height="@dimen/divider_68px"
+            android:layout_marginEnd="@dimen/divider_305px"
+            android:layout_marginBottom="@dimen/divider_60px"
+            android:background="@drawable/bg_next_question"
+            android:gravity="center"
+            android:text="@string/continues"
+            android:textColor="@android:color/white"
+            android:textSize="@dimen/divider_28px"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent" />
+
 
     </androidx.constraintlayout.widget.ConstraintLayout>
 

+ 4 - 0
moca/src/main/res/navigation/nav_moca.xml

@@ -208,6 +208,10 @@
             android:id="@+id/action_listenSpeakFragment_to_computationFragment"
             app:destination="@id/computationFragment" />
 
+        <action
+            android:id="@+id/action_listenSpeakFragment_to_listenSpeakResultFragment"
+            app:destination="@id/listenSpeakResultFragment" />
+
     </fragment>
 
     <fragment

+ 1 - 0
moca/src/main/res/values/strings.xml

@@ -36,4 +36,5 @@
     <string name="please_say_numbers_just_heard_in_order" tools:ignore="ResourceName">请您按顺序说出刚才听到的数字</string>
     <string name="may_i_ask_the_subject_is_wrong" tools:ignore="ResourceName">请问受试者错了</string>
     <string name="time" tools:ignore="ResourceName">次</string>
+    <string name="please_listen_carefully_after_listening_please_say_this_sentence_word_for_word" tools:ignore="ResourceName">接下来将给您听一句话,请仔细听,听完后请您一字不差地说出这句话,请听题</string>
 </resources>