瀏覽代碼

1.添加训练内容UI
2.修改首页获取今天训练内容接口

王鹏鹏 2 年之前
父節點
當前提交
af7960ea99
共有 25 個文件被更改,包括 304 次插入64 次删除
  1. 2 1
      .idea/misc.xml
  2. 3 0
      baselib/build.gradle
  3. 3 0
      baselib/src/main/java/com/yingyangfly/baselib/base/BaseActivity.kt
  4. 7 0
      baselib/src/main/java/com/yingyangfly/baselib/base/BaseFragment.kt
  5. 3 0
      baselib/src/main/java/com/yingyangfly/baselib/base/BaseFragmentActivity.kt
  6. 8 0
      baselib/src/main/java/com/yingyangfly/baselib/utils/RxBusCodes.kt
  7. 2 1
      config.gradle
  8. 10 15
      webview/src/main/java/com/yingyangfly/webview/BridgeWebActivity.kt
  9. 1 1
      workbenches/src/main/java/com/yingyang/workbenches/WorkbenchesActivity.kt
  10. 2 2
      workbenches/src/main/java/com/yingyang/workbenches/WorkbenchesViewModel.kt
  11. 0 2
      workbenches/src/main/java/com/yingyang/workbenches/adapter/FreeTrainAdapter.kt
  12. 25 0
      workbenches/src/main/java/com/yingyang/workbenches/adapter/TrainContentAdapter.kt
  13. 4 1
      workbenches/src/main/java/com/yingyang/workbenches/dialog/TaskFragment.kt
  14. 24 0
      workbenches/src/main/java/com/yingyang/workbenches/entity/TrainContentBean.kt
  15. 16 0
      workbenches/src/main/java/com/yingyang/workbenches/entity/TreatmentBean.kt
  16. 14 2
      workbenches/src/main/java/com/yingyang/workbenches/net/WorkbenchesApiService.kt
  17. 41 6
      workbenches/src/main/java/com/yingyang/workbenches/traincontent/TrainContentFragment.kt
  18. 40 0
      workbenches/src/main/java/com/yingyang/workbenches/traincontent/TrainContentViewModel.kt
  19. 3 2
      workbenches/src/main/java/com/yingyang/workbenches/traindata/TrainDataActivity.kt
  20. 21 29
      workbenches/src/main/res/layout/fragment_train_content.xml
  21. 50 0
      workbenches/src/main/res/layout/item_training_content.xml
  22. 1 0
      workbenches/src/main/res/values/colors.xml
  23. 1 0
      workbenches/src/main/res/values/dimens.xml
  24. 1 0
      workbenches/src/main/res/values/strings.xml
  25. 22 2
      workbenches/src/main/res/values/themes.xml

+ 2 - 1
.idea/misc.xml

@@ -58,13 +58,14 @@
         <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/fragment_brain_ability.xml" value="0.21014492753623187" />
         <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/fragment_free_training.xml" value="0.21014492753623187" />
         <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/fragment_task.xml" value="0.6" />
-        <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/fragment_train_content.xml" value="0.4421768707482993" />
+        <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/fragment_train_content.xml" value="0.23654015887025595" />
         <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/fragment_train_report.xml" value="0.22826086956521738" />
         <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/item_free_training.xml" value="0.8800000000000001" />
         <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/item_free_training_type.xml" value="0.536" />
         <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/item_game_list.xml" value="0.4" />
         <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/item_task.xml" value="0.8800000000000001" />
         <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/item_train_report.xml" value="0.536" />
+        <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/item_training_content.xml" value="0.36858475894245724" />
         <entry key="..\:/workspace/yingyangfly/app/src/main/res/layout/activity_main.xml" value="0.22826086956521738" />
         <entry key="..\:/workspace/yingyangfly/app/src/main/res/layout/activity_push.xml" value="0.22239583333333332" />
         <entry key="..\:/workspace/yingyangfly/baselib/src/main/res/drawable/bg_center_toast.xml" value="0.2265" />

+ 3 - 0
baselib/build.gradle

@@ -30,6 +30,7 @@ android {
     buildTypes {
         debug {
             minifyEnabled false
+            buildConfigField "String", "TENCENT_IM_APPID", "\"1400827693\""
             buildConfigField "String", "BAIDU_APPID", "\"37371987\""
             buildConfigField "String", "BAIDU_APPKEY", "\"RzdZg1lVNxAB1NpQi0SSwLIe\""
             buildConfigField "String", "BAIDU_SECRETKEY", "\"4AfYdqAyA9PtLOoNFFsyUogDfxoMBmqS\""
@@ -41,6 +42,7 @@ android {
 
         release {
             minifyEnabled false
+            buildConfigField "String", "TENCENT_IM_APPID", "\"1400827693\""
             buildConfigField "String", "BAIDU_APPID", "\"37371987\""
             buildConfigField "String", "BAIDU_APPKEY", "\"RzdZg1lVNxAB1NpQi0SSwLIe\""
             buildConfigField "String", "BAIDU_SECRETKEY", "\"4AfYdqAyA9PtLOoNFFsyUogDfxoMBmqS\""
@@ -125,4 +127,5 @@ dependencies {
     kapt(rootProject.ext.dependencies.glide_compiler)
     api(rootProject.ext.dependencies.mmkv_ktx)
     debugApi(rootProject.ext.dependencies.leakcanary)
+    debugApi(rootProject.ext.dependencies.rxbus)
 }

+ 3 - 0
baselib/src/main/java/com/yingyangfly/baselib/base/BaseActivity.kt

@@ -25,6 +25,7 @@ import com.yingyangfly.baselib.ext.initBar
 import com.yingyangfly.baselib.utils.ActivityManagers
 import com.yingyangfly.baselib.utils.ResUtil
 import com.yingyangfly.baselib.utils.ViewTool
+import gorden.rxbus2.RxBus
 
 /**
  * activity基类
@@ -63,6 +64,7 @@ abstract class BaseActivity <DB : ViewDataBinding> : AppCompatActivity(),
     @SuppressLint("SourceLockedOrientationActivity")
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+        RxBus.get().register(this)
         mContext = this
         initWindow()
 //        ScreenUtils.setStatusBarTransparent(window)
@@ -238,6 +240,7 @@ abstract class BaseActivity <DB : ViewDataBinding> : AppCompatActivity(),
 
     override fun onDestroy() {
         super.onDestroy()
+        RxBus.get().unRegister(this)
         ActivityManagers.instance.removeActivity(this)
     }
 

+ 7 - 0
baselib/src/main/java/com/yingyangfly/baselib/base/BaseFragment.kt

@@ -17,6 +17,7 @@ import com.yingyangfly.baselib.dialog.LoadingDialog
 import com.yingyangfly.baselib.ext.getDbClass
 import com.yingyangfly.baselib.utils.ResUtil
 import com.yingyangfly.baselib.utils.ViewTool
+import gorden.rxbus2.RxBus
 
 /**
  * @author: gold
@@ -52,6 +53,7 @@ abstract class BaseFragment<DB : ViewDataBinding> : Fragment(), OnRefreshLoadMor
         savedInstanceState: Bundle?
     ): View? {
         mContext = activity!!
+        RxBus.get().register(this)
         ARouter.getInstance().inject(this)
         initSmartRefresh()
         val params: ViewGroup.LayoutParams = LinearLayout.LayoutParams(
@@ -180,4 +182,9 @@ abstract class BaseFragment<DB : ViewDataBinding> : Fragment(), OnRefreshLoadMor
         netLoading.dismiss()
     }
 
+    override fun onDestroy() {
+        super.onDestroy()
+        RxBus.get().unRegister(this)
+    }
+
 }

+ 3 - 0
baselib/src/main/java/com/yingyangfly/baselib/base/BaseFragmentActivity.kt

@@ -27,6 +27,7 @@ import com.yingyangfly.baselib.ext.initBar
 import com.yingyangfly.baselib.utils.ActivityManagers
 import com.yingyangfly.baselib.utils.ResUtil
 import com.yingyangfly.baselib.utils.ViewTool
+import gorden.rxbus2.RxBus
 
 
 /**
@@ -66,6 +67,7 @@ abstract class BaseFragmentActivity<DB : ViewDataBinding> : FragmentActivity(),
     @SuppressLint("SourceLockedOrientationActivity")
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+        RxBus.get().register(this)
         mContext = this
         initWindow()
 //        ScreenUtils.setStatusBarTransparent(window)
@@ -241,6 +243,7 @@ abstract class BaseFragmentActivity<DB : ViewDataBinding> : FragmentActivity(),
 
     override fun onDestroy() {
         super.onDestroy()
+        RxBus.get().unRegister(this)
         ActivityManagers.instance.removeActivity(this)
     }
 

+ 8 - 0
baselib/src/main/java/com/yingyangfly/baselib/utils/RxBusCodes.kt

@@ -0,0 +1,8 @@
+package com.yingyangfly.baselib.utils
+
+object RxBusCodes {
+
+    //获取训练内容
+    const val GetTrainContent = 9000
+
+}

+ 2 - 1
config.gradle

@@ -114,7 +114,8 @@ ext {
             "gson"                   : 'com.google.code.gson:gson:2.8.5',
             "leakcanary"             : 'com.squareup.leakcanary:leakcanary-android:2.10',
             "LiteAVSDK_Player"       : 'com.tencent.liteav:LiteAVSDK_Player:latest.release',
-            "imsdk"                  : 'com.tencent.imsdk:imsdk:5.1.66'
+            "imsdk"                  : 'com.tencent.imsdk:imsdk:5.1.66',
+            "rxbus"                  : 'lib.gorden.rxbus2:rxbus:2.0.1'
 
     ]
 }

+ 10 - 15
webview/src/main/java/com/yingyangfly/webview/BridgeWebActivity.kt

@@ -4,44 +4,38 @@ import android.annotation.SuppressLint
 import android.content.pm.ActivityInfo
 import android.os.Build
 import android.os.Bundle
-import android.util.Log
+import android.view.ViewGroup
 import android.webkit.WebResourceRequest
 import android.webkit.WebSettings
 import android.webkit.WebView
 import android.webkit.WebViewClient
+import androidx.appcompat.app.AppCompatActivity
+import androidx.databinding.DataBindingUtil
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.github.lzyzsd.jsbridge.BridgeHandler
 import com.github.lzyzsd.jsbridge.CallBackFunction
-import com.yingyangfly.baselib.base.BaseActivity
 import com.yingyangfly.baselib.router.RouterUrlCommon
+import com.yingyangfly.baselib.utils.ViewTool
 import com.yingyangfly.webview.databinding.ActivityBridgeWebBinding
 
 /**
  * BridgeWebview
  */
 @Route(path = RouterUrlCommon.WEB_VIEW_INTERACTION_JS)
-class BridgeWebActivity : BaseActivity<ActivityBridgeWebBinding>() {
+class BridgeWebActivity : AppCompatActivity() {
 
+    private lateinit var binding: ActivityBridgeWebBinding
     private lateinit var webSettings: WebSettings
     private var url: String = ""
 
     override fun onCreate(savedInstanceState: Bundle?) {
-        url = intent.getStringExtra("url") ?: ""
         super.onCreate(savedInstanceState)
-    }
-
-    override fun initViews() {
+        url = intent.getStringExtra("url") ?: ""
+        binding = DataBindingUtil.setContentView(this, R.layout.activity_bridge_web)
+        ViewTool.inflateLayoutPixels(this, binding.root, 1194, 834)
         initWebView()
     }
 
-    override fun initListener() {
-
-    }
-
-    override fun initData() {
-
-    }
-
     @SuppressLint("JavascriptInterface", "SetJavaScriptEnabled")
     private fun initWebView() {
         webSettings = binding.webView.settings
@@ -114,6 +108,7 @@ class BridgeWebActivity : BaseActivity<ActivityBridgeWebBinding>() {
         binding.webView.onPause();
         binding.webView.removeAllViews() // 移除webview上子view
         binding.webView.destroy() // 销毁WebView自身。
+        (binding.webView.parent as ViewGroup).removeView(binding.webView) // 把webview从视图中移除
     }
 
     override fun onResume() {

+ 1 - 1
workbenches/src/main/java/com/yingyang/workbenches/WorkbenchesActivity.kt

@@ -192,7 +192,7 @@ class WorkbenchesActivity : BaseMVVMActivity<ActivityWorkbenchesBinding, Workben
     private fun getFindMyTask() {
         taskBean.clear()
         taskList.clear()
-        viewModel.getFindMyTask(fail = {
+        viewModel.findMyCurrentTask(fail = {
             it.toast()
         }, success = {
             if (it.isNullOrEmpty().not()) {

+ 2 - 2
workbenches/src/main/java/com/yingyang/workbenches/WorkbenchesViewModel.kt

@@ -41,11 +41,11 @@ class WorkbenchesViewModel : BaseViewModel() {
     /**
      * 查询是否有进行中的任务
      */
-    fun getFindMyTask(
+    fun findMyCurrentTask(
         fail: ((msg: String) -> Unit)? = null,
         success: ((success: List<MyTaskBean>) -> Unit)? = null,
     ) = launchFlow(true) {
-        WORKBENCHES_API.getFindMyTask()
+        WORKBENCHES_API.findMyCurrentTask()
     }.runUI(
         success,
         fail

+ 0 - 2
workbenches/src/main/java/com/yingyang/workbenches/adapter/FreeTrainAdapter.kt

@@ -1,11 +1,9 @@
 package com.yingyang.workbenches.adapter
 
 import android.annotation.SuppressLint
-import android.text.TextUtils
 import com.yingyang.workbenches.R
 import com.yingyang.workbenches.databinding.ItemFreeTrainingBinding
 import com.yingyang.workbenches.entity.Record
-import com.yingyang.workbenches.entity.TrainTypeBean
 import com.yingyangfly.baselib.adapter.BaseDataBindingAdapter
 import com.yingyangfly.baselib.ext.setOnSingleClickListener
 

+ 25 - 0
workbenches/src/main/java/com/yingyang/workbenches/adapter/TrainContentAdapter.kt

@@ -0,0 +1,25 @@
+package com.yingyang.workbenches.adapter
+
+import com.yingyang.workbenches.R
+import com.yingyang.workbenches.databinding.ItemTrainingContentBinding
+import com.yingyang.workbenches.entity.TrainContentBean
+import com.yingyangfly.baselib.adapter.BaseDataBindingAdapter
+
+/**
+ * 训练内容Adapter
+ */
+class TrainContentAdapter(override val layoutId: Int = R.layout.item_training_content) :
+    BaseDataBindingAdapter<TrainContentBean, ItemTrainingContentBinding>() {
+    override fun onBindViewHolder(
+        binding: ItemTrainingContentBinding,
+        item: TrainContentBean,
+        position: Int
+    ) {
+        binding.data = item
+        if (position % 2 == 0) {
+            binding.contentLayout.setBackgroundResource(R.color.color_FFE6ECFF)
+        } else {
+            binding.contentLayout.setBackgroundResource(R.color.color_FFCFD9FF)
+        }
+    }
+}

+ 4 - 1
workbenches/src/main/java/com/yingyang/workbenches/dialog/TaskFragment.kt

@@ -1,7 +1,10 @@
 package com.yingyang.workbenches.dialog
 
 import android.os.Bundle
-import android.view.*
+import android.view.LayoutInflater
+import android.view.MotionEvent
+import android.view.View
+import android.view.ViewGroup
 import android.widget.ImageView
 import android.widget.TextView
 import androidx.appcompat.widget.AppCompatButton

+ 24 - 0
workbenches/src/main/java/com/yingyang/workbenches/entity/TrainContentBean.kt

@@ -0,0 +1,24 @@
+package com.yingyang.workbenches.entity
+
+/**
+ * 训练内容bean
+ */
+data class TrainContentBean(
+    val createBy: String,
+    val createTime: String,
+    val currentTaskNum: Int,
+    val gameCodes: String,
+    val gameCoverImages: Any,
+    val gameNames: String,
+    val id: String,
+    val orgCode: String,
+    val orgName: String,
+    val status: String,
+    val taskDesn: String,
+    val taskName: String,
+    val taskStartTime: String,//开始时间
+    val totalTaskNum: Int,
+    val updateBy: String,
+    val updateTime: String,
+    val userId: String
+)

+ 16 - 0
workbenches/src/main/java/com/yingyang/workbenches/entity/TreatmentBean.kt

@@ -0,0 +1,16 @@
+package com.yingyang.workbenches.entity
+
+/**
+ * 训练内容选项下拉框
+ */
+data class TreatmentBean(
+    val createTime: String,
+    val doctorId: String,
+    val endTime: String,
+    val id: String,
+    val name: String,
+    val orgCode: String,
+    val orgName: String,
+    val startTime: String,
+    val updateTime: String
+)

+ 14 - 2
workbenches/src/main/java/com/yingyang/workbenches/net/WorkbenchesApiService.kt

@@ -34,8 +34,8 @@ interface WorkbenchesApiService {
     /**
      * 查询是否有进行中的任务
      */
-    @POST("app/task/findMyTask")
-    suspend fun getFindMyTask(): BaseResp<List<MyTaskBean>>
+    @POST("app/task/findMyCurrentTask")
+    suspend fun findMyCurrentTask(): BaseResp<List<MyTaskBean>>
 
     /**
      * 获取游戏详情
@@ -56,4 +56,16 @@ interface WorkbenchesApiService {
      */
     @POST("system/dict/data/selectByDictType")
     suspend fun getSelectByDictType(@Query("dictType") dictType: String): BaseResp<List<TrainTypeBean>>
+
+    /**
+     * 获取训练内容列表
+     */
+    @POST("app/task/findMyTask")
+    suspend fun findMyTask(@Query("treatmentId") treatmentId: String): BaseResp<List<TrainContentBean>>
+
+    /**
+     * 获取训练内容列表
+     */
+    @POST("app/treatment/findAll")
+    suspend fun findAllTreatment(): BaseResp<List<TreatmentBean>>
 }

+ 41 - 6
workbenches/src/main/java/com/yingyang/workbenches/traincontent/TrainContentFragment.kt

@@ -1,16 +1,25 @@
 package com.yingyang.workbenches.traincontent
 
+import com.yingyang.workbenches.adapter.TrainContentAdapter
 import com.yingyang.workbenches.databinding.FragmentTrainContentBinding
-import com.yingyangfly.baselib.base.BaseFragment
-import com.yingyangfly.baselib.ext.logi
+import com.yingyangfly.baselib.ext.toast
+import com.yingyangfly.baselib.mvvm.BaseMVVMFragment
+import com.yingyangfly.baselib.utils.RxBusCodes
+import gorden.rxbus2.Subscribe
+import gorden.rxbus2.ThreadMode
 
 /**
  * 训练内容
  */
-class TrainContentFragment : BaseFragment<FragmentTrainContentBinding>() {
+class TrainContentFragment :
+    BaseMVVMFragment<FragmentTrainContentBinding, TrainContentViewModel>() {
 
-    override fun initViews() {
+    private val adapter by lazy { TrainContentAdapter() }
 
+    override fun initViews() {
+        binding {
+            rvTrainingContent.adapter = adapter
+        }
     }
 
     override fun initListener() {
@@ -18,10 +27,36 @@ class TrainContentFragment : BaseFragment<FragmentTrainContentBinding>() {
     }
 
     override fun initData() {
+        loadData()
+    }
+
+    /**
+     * 加载训练内容列表
+     */
+    @Subscribe(code = RxBusCodes.GetTrainContent, threadMode = ThreadMode.MAIN)
+    fun loadData() {
+        findAllTreatment()
+    }
 
+    private fun findAllTreatment() {
+        viewModel.findAllTreatment(fail = {
+            it.toast()
+        }, success = {
+            if (it.isNullOrEmpty().not()) {
+                it.forEach {
+                    findMyTask(it.id)
+                }
+            }
+        })
     }
 
-    fun logCate() {
-        "训练内容".logi()
+    private fun findMyTask(treatmentId: String) {
+        viewModel.findMyTask(treatmentId, fail = {
+            it.toast()
+        }, success = {
+            if (it.isNullOrEmpty().not()) {
+                adapter.setData(it)
+            }
+        })
     }
 }

+ 40 - 0
workbenches/src/main/java/com/yingyang/workbenches/traincontent/TrainContentViewModel.kt

@@ -0,0 +1,40 @@
+package com.yingyang.workbenches.traincontent
+
+import com.yingyang.workbenches.entity.TrainContentBean
+import com.yingyang.workbenches.entity.TreatmentBean
+import com.yingyang.workbenches.net.WORKBENCHES_API
+import com.yingyangfly.baselib.mvvm.BaseViewModel
+
+/**
+ * @author 王鹏鹏
+ * @description 工作台页面ViewModel
+ */
+class TrainContentViewModel : BaseViewModel() {
+
+    /**
+     * 获取休闲健脑视频列表
+     */
+    fun findAllTreatment(
+        fail: ((msg: String) -> Unit)? = null,
+        success: ((success: List<TreatmentBean>) -> Unit)? = null,
+    ) = launchFlow(true) {
+        WORKBENCHES_API.findAllTreatment()
+    }.runUI(
+        success,
+        fail
+    )
+
+    /**
+     * 获取休闲健脑视频列表
+     */
+    fun findMyTask(
+        treatmentId: String,
+        fail: ((msg: String) -> Unit)? = null,
+        success: ((success: List<TrainContentBean>) -> Unit)? = null,
+    ) = launchFlow(true) {
+        WORKBENCHES_API.findMyTask(treatmentId)
+    }.runUI(
+        success,
+        fail
+    )
+}

+ 3 - 2
workbenches/src/main/java/com/yingyang/workbenches/traindata/TrainDataActivity.kt

@@ -13,6 +13,8 @@ import com.yingyangfly.baselib.base.BaseFragmentActivity
 import com.yingyangfly.baselib.ext.setOnSingleClickListener
 import com.yingyangfly.baselib.router.RouterUrlCommon
 import com.yingyangfly.baselib.utils.JumpUtil
+import com.yingyangfly.baselib.utils.RxBusCodes
+import gorden.rxbus2.RxBus
 
 
 /**
@@ -63,7 +65,7 @@ class TrainDataActivity : BaseFragmentActivity<ActivityTrainDataBinding>() {
                     }
 
                     2 -> {
-                        trainContentFragment.logCate()
+                        RxBus.get().send(RxBusCodes.GetTrainContent)
                     }
 
                     3 -> {
@@ -83,7 +85,6 @@ class TrainDataActivity : BaseFragmentActivity<ActivityTrainDataBinding>() {
     }
 
     override fun initData() {
-        dataMonitorFragment.logCate()
     }
 
 }

+ 21 - 29
workbenches/src/main/res/layout/fragment_train_content.xml

@@ -18,30 +18,6 @@
             android:layout_marginStart="@dimen/divider_78px"
             android:layout_marginEnd="@dimen/divider_40px"
             android:background="@drawable/bg_training_content"
-            app:layout_constraintLeft_toLeftOf="parent"
-            app:layout_constraintRight_toLeftOf="@id/weekLayout"
-            tools:ignore="MissingConstraints">
-
-            <TextView
-                style="@style/training_content_title_textview"
-                android:text="第一个疗程"
-                app:layout_constraintLeft_toLeftOf="parent"
-                tools:text="第一个疗程" />
-
-            <androidx.appcompat.widget.AppCompatImageView
-                style="@style/training_content_title_arrow"
-                android:src="@mipmap/icon_arrow" />
-
-        </androidx.constraintlayout.widget.ConstraintLayout>
-
-        <androidx.constraintlayout.widget.ConstraintLayout
-            android:id="@+id/weekLayout"
-            style="@style/training_content_title_layout"
-            android:layout_marginStart="@dimen/divider_40px"
-            android:layout_marginEnd="@dimen/divider_78px"
-            android:background="@drawable/bg_training_content"
-            app:layout_constraintLeft_toRightOf="@id/courselayout"
-            app:layout_constraintRight_toRightOf="parent"
             tools:ignore="MissingConstraints">
 
             <TextView
@@ -70,28 +46,44 @@
 
             <androidx.appcompat.widget.AppCompatTextView
                 android:id="@+id/tvDate"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                app:layout_constraintBottom_toBottomOf="parent"
+                style="@style/training_content_title_appcompattextview"
+                android:text="@string/date"
+                app:layout_constraintHorizontal_weight="1"
                 app:layout_constraintLeft_toLeftOf="parent"
-                app:layout_constraintTop_toTopOf="parent" />
+                app:layout_constraintRight_toLeftOf="@id/tvExerciseTherapy" />
 
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tvExerciseTherapy"
+                style="@style/training_content_title_appcompattextview"
+                android:text="@string/exercise_therapy"
+                app:layout_constraintHorizontal_weight="1"
+                app:layout_constraintLeft_toRightOf="@id/tvDate"
+                app:layout_constraintRight_toLeftOf="@id/tvCognitiveTraining" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tvCognitiveTraining"
+                style="@style/training_content_title_appcompattextview"
+                android:text="@string/cognitive_training"
+                app:layout_constraintHorizontal_weight="2"
+                app:layout_constraintLeft_toRightOf="@id/tvExerciseTherapy"
+                app:layout_constraintRight_toRightOf="parent" />
 
         </androidx.constraintlayout.widget.ConstraintLayout>
 
         <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/rvTrainingContent"
             android:layout_width="match_parent"
             android:layout_height="0dp"
             android:layout_marginStart="@dimen/divider_32px"
             android:layout_marginEnd="@dimen/divider_32px"
             android:layout_marginBottom="@dimen/divider_32px"
             android:background="@drawable/bg_training_content_list"
+            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintLeft_toLeftOf="parent"
             app:layout_constraintRight_toRightOf="parent"
             app:layout_constraintTop_toBottomOf="@+id/contentTitleLayout" />
 
-
     </androidx.constraintlayout.widget.ConstraintLayout>
 
 </layout>

+ 50 - 0
workbenches/src/main/res/layout/item_training_content.xml

@@ -0,0 +1,50 @@
+<?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">
+
+    <data>
+
+        <variable
+            name="data"
+            type="com.yingyang.workbenches.entity.TrainContentBean" />
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/contentLayout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:minHeight="@dimen/divider_112px">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tvDate"
+            style="@style/item_training_content_appcompattextview"
+            android:gravity="center"
+            android:text="@{data.taskStartTime}"
+            app:layout_constraintHorizontal_weight="1"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toLeftOf="@id/tvExerciseTherapy"
+            tools:ignore="MissingConstraints" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tvExerciseTherapy"
+            style="@style/item_training_content_appcompattextview"
+            android:gravity="center"
+            android:text="@{data.taskName}"
+            app:layout_constraintHorizontal_weight="1"
+            app:layout_constraintLeft_toRightOf="@id/tvDate"
+            app:layout_constraintRight_toLeftOf="@id/tvCognitiveTraining"
+            tools:ignore="MissingConstraints" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tvCognitiveTraining"
+            style="@style/item_training_content_appcompattextview"
+            android:text="@{data.gameNames}"
+            app:layout_constraintHorizontal_weight="2"
+            app:layout_constraintLeft_toRightOf="@id/tvExerciseTherapy"
+            app:layout_constraintRight_toRightOf="parent"
+            tools:ignore="MissingConstraints" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</layout>

+ 1 - 0
workbenches/src/main/res/values/colors.xml

@@ -33,4 +33,5 @@
     <color name="color_B33E3F3E" tools:ignore="ResourceName">#B33E3F3E</color>
     <color name="color_FF4773FF" tools:ignore="ResourceName">#FF4773FF</color>
     <color name="color_FFE6ECFF" tools:ignore="ResourceName">#FFE6ECFF</color>
+    <color name="color_FFCFD9FF" tools:ignore="ResourceName">#FFCFD9FF</color>
 </resources>

+ 1 - 0
workbenches/src/main/res/values/dimens.xml

@@ -14,6 +14,7 @@
     <dimen name="divider_348px" tools:ignore="PxUsage">348px</dimen>
     <dimen name="divider_345px" tools:ignore="PxUsage">345px</dimen>
     <dimen name="divider_340px" tools:ignore="PxUsage">340px</dimen>
+    <dimen name="divider_335px" tools:ignore="PxUsage">335px</dimen>
     <dimen name="divider_330px" tools:ignore="PxUsage">330px</dimen>
     <dimen name="divider_320px" tools:ignore="PxUsage">320px</dimen>
     <dimen name="divider_289px" tools:ignore="PxUsage">289px</dimen>

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

@@ -27,4 +27,5 @@
     <string name="perception" tools:ignore="ResourceName">感知觉</string>
     <string name="memory" tools:ignore="ResourceName">记忆力</string>
     <string name="capacity_calculation" tools:ignore="ResourceName">计算力</string>
+    <string name="exercise_therapy" tools:ignore="ResourceName">运动疗法</string>
 </resources>

+ 22 - 2
workbenches/src/main/res/values/themes.xml

@@ -72,11 +72,12 @@
     </style>
 
     <style name="training_content_title_layout" tools:ignore="ResourceName">
-        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_width">@dimen/divider_335px</item>
         <item name="android:layout_height">@dimen/divider_62px</item>
         <item name="android:layout_marginTop">@dimen/divider_60px</item>
-        <item name="layout_constraintTop_toTopOf">parent</item>
+        <item name="layout_constraintLeft_toLeftOf">parent</item>
         <item name="background">@drawable/bg_training_content</item>
+        <item name="layout_constraintTop_toTopOf">parent</item>
     </style>
 
     <style name="training_content_title_arrow" tools:ignore="ResourceName">
@@ -98,4 +99,23 @@
         <item name="layout_constraintLeft_toLeftOf">parent</item>
         <item name="layout_constraintTop_toTopOf">parent</item>
     </style>
+
+    <style name="training_content_title_appcompattextview" tools:ignore="ResourceName">
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:gravity">center_horizontal</item>
+        <item name="android:textSize">@dimen/divider_28px</item>
+        <item name="android:textColor">@android:color/white</item>
+        <item name="layout_constraintBottom_toBottomOf">parent</item>
+        <item name="layout_constraintTop_toTopOf">parent</item>
+    </style>
+
+    <style name="item_training_content_appcompattextview" tools:ignore="ResourceName">
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:textSize">@dimen/divider_24px</item>
+        <item name="android:textColor">@color/color_FF4A76FF</item>
+        <item name="layout_constraintBottom_toBottomOf">parent</item>
+        <item name="layout_constraintTop_toTopOf">parent</item>
+    </style>
 </resources>