diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bb27f43..c9820de 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,9 @@ + + +) : RecyclerView.Adapter() { + + private val TYPE_TOP_TITLE = 0 + private val TYPE_ITEM_DATA = 1 + private var inflater: LayoutInflater = LayoutInflater.from(ctx) + + override fun getItemCount(): Int = dataRows.size + 1 + + override fun getItemViewType(position: Int): Int { + return if (position == 0) { + TYPE_TOP_TITLE + } else { + TYPE_ITEM_DATA + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + return if (viewType == TYPE_TOP_TITLE) { + ViewHolder(inflater.inflate(R.layout.item_task_detail_rv_l_title, parent, false)) + } else { + ViewHolder(inflater.inflate(R.layout.item_task_detail_rv_l, parent, false)) + } + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + if (holder.itemViewType == TYPE_ITEM_DATA) { + //绑定数据。标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 + val item = dataRows[position - 1] + + holder.setText(R.id.locateTimeView, item.ts) + .setText(R.id.gasValueView, item.gas) + .setText(R.id.horizontalAngleView, item.direction) + .setText(R.id.verticalAngleView, item.pitch) + .setText(R.id.isAlarmView, item.isAlarm) + .setText(R.id.alarmCodeView, item.alarmCode) + .setText(R.id.speedView, item.speed) + .setText(R.id.lngView, item.longitude) + .setText(R.id.latView, item.lagitude) + } else { + holder.setText(R.id.locateTimeView, "时间") + .setText(R.id.gasValueView, "气体浓度") + .setText(R.id.horizontalAngleView, "水平角度") + .setText(R.id.verticalAngleView, "垂直角度") + .setText(R.id.isAlarmView, "是否报警") + .setText(R.id.alarmCodeView, "报警编号") + .setText(R.id.speedView, "车速") + .setText(R.id.lngView, "经度") + .setText(R.id.latView, "纬度") + .setText(R.id.operationView, "操作") + } + + //item背景色 + if (position % 2 == 0) { + val linearLayout = holder.itemView.findViewById(R.id.rootView) + linearLayout.setBackgroundColor(Color.parseColor("#EEF1F6")) + } + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bb27f43..c9820de 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,9 @@ + +) : RecyclerView.Adapter() { + + private val TYPE_TOP_TITLE = 0 + private val TYPE_ITEM_DATA = 1 + private var inflater: LayoutInflater = LayoutInflater.from(ctx) + + override fun getItemCount(): Int = dataRows.size + 1 + + override fun getItemViewType(position: Int): Int { + return if (position == 0) { + TYPE_TOP_TITLE + } else { + TYPE_ITEM_DATA + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + return if (viewType == TYPE_TOP_TITLE) { + ViewHolder(inflater.inflate(R.layout.item_task_detail_rv_l_title, parent, false)) + } else { + ViewHolder(inflater.inflate(R.layout.item_task_detail_rv_l, parent, false)) + } + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + if (holder.itemViewType == TYPE_ITEM_DATA) { + //绑定数据。标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 + val item = dataRows[position - 1] + + holder.setText(R.id.locateTimeView, item.ts) + .setText(R.id.gasValueView, item.gas) + .setText(R.id.horizontalAngleView, item.direction) + .setText(R.id.verticalAngleView, item.pitch) + .setText(R.id.isAlarmView, item.isAlarm) + .setText(R.id.alarmCodeView, item.alarmCode) + .setText(R.id.speedView, item.speed) + .setText(R.id.lngView, item.longitude) + .setText(R.id.latView, item.lagitude) + } else { + holder.setText(R.id.locateTimeView, "时间") + .setText(R.id.gasValueView, "气体浓度") + .setText(R.id.horizontalAngleView, "水平角度") + .setText(R.id.verticalAngleView, "垂直角度") + .setText(R.id.isAlarmView, "是否报警") + .setText(R.id.alarmCodeView, "报警编号") + .setText(R.id.speedView, "车速") + .setText(R.id.lngView, "经度") + .setText(R.id.latView, "纬度") + .setText(R.id.operationView, "操作") + } + + //item背景色 + if (position % 2 == 0) { + val linearLayout = holder.itemView.findViewById(R.id.rootView) + linearLayout.setBackgroundColor(Color.parseColor("#EEF1F6")) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt index bbe494d..b88846a 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt @@ -16,6 +16,7 @@ import com.casic.br.ktd.utils.LoadingDialogHub import com.casic.br.ktd.utils.LocaleConstant import com.casic.br.ktd.view.InspectionActivity +import com.casic.br.ktd.view.TaskDetailActivity import com.casic.br.ktd.vm.AlarmViewModel import com.casic.br.ktd.vm.TaskViewModel import com.casic.br.ktd.widgets.AlertControlDialog @@ -111,7 +112,7 @@ taskAdapter.setOnItemCheckedListener(object : TaskAdapter.OnItemCheckedListener { override fun onItemClicked(item: TaskListModel.DataModel.RowsModel) { - "点击${item.taskCode}".show(requireContext()) + requireContext().navigatePageTo(item.id) } override fun onItemChecked(items: ArrayList) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bb27f43..c9820de 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,9 @@ + +) : RecyclerView.Adapter() { + + private val TYPE_TOP_TITLE = 0 + private val TYPE_ITEM_DATA = 1 + private var inflater: LayoutInflater = LayoutInflater.from(ctx) + + override fun getItemCount(): Int = dataRows.size + 1 + + override fun getItemViewType(position: Int): Int { + return if (position == 0) { + TYPE_TOP_TITLE + } else { + TYPE_ITEM_DATA + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + return if (viewType == TYPE_TOP_TITLE) { + ViewHolder(inflater.inflate(R.layout.item_task_detail_rv_l_title, parent, false)) + } else { + ViewHolder(inflater.inflate(R.layout.item_task_detail_rv_l, parent, false)) + } + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + if (holder.itemViewType == TYPE_ITEM_DATA) { + //绑定数据。标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 + val item = dataRows[position - 1] + + holder.setText(R.id.locateTimeView, item.ts) + .setText(R.id.gasValueView, item.gas) + .setText(R.id.horizontalAngleView, item.direction) + .setText(R.id.verticalAngleView, item.pitch) + .setText(R.id.isAlarmView, item.isAlarm) + .setText(R.id.alarmCodeView, item.alarmCode) + .setText(R.id.speedView, item.speed) + .setText(R.id.lngView, item.longitude) + .setText(R.id.latView, item.lagitude) + } else { + holder.setText(R.id.locateTimeView, "时间") + .setText(R.id.gasValueView, "气体浓度") + .setText(R.id.horizontalAngleView, "水平角度") + .setText(R.id.verticalAngleView, "垂直角度") + .setText(R.id.isAlarmView, "是否报警") + .setText(R.id.alarmCodeView, "报警编号") + .setText(R.id.speedView, "车速") + .setText(R.id.lngView, "经度") + .setText(R.id.latView, "纬度") + .setText(R.id.operationView, "操作") + } + + //item背景色 + if (position % 2 == 0) { + val linearLayout = holder.itemView.findViewById(R.id.rootView) + linearLayout.setBackgroundColor(Color.parseColor("#EEF1F6")) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt index bbe494d..b88846a 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt @@ -16,6 +16,7 @@ import com.casic.br.ktd.utils.LoadingDialogHub import com.casic.br.ktd.utils.LocaleConstant import com.casic.br.ktd.view.InspectionActivity +import com.casic.br.ktd.view.TaskDetailActivity import com.casic.br.ktd.vm.AlarmViewModel import com.casic.br.ktd.vm.TaskViewModel import com.casic.br.ktd.widgets.AlertControlDialog @@ -111,7 +112,7 @@ taskAdapter.setOnItemCheckedListener(object : TaskAdapter.OnItemCheckedListener { override fun onItemClicked(item: TaskListModel.DataModel.RowsModel) { - "点击${item.taskCode}".show(requireContext()) + requireContext().navigatePageTo(item.id) } override fun onItemChecked(items: ArrayList) { diff --git a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt new file mode 100644 index 0000000..0eafe3b --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt @@ -0,0 +1,54 @@ +package com.casic.br.ktd.view + +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.br.ktd.adapter.TaskDetailAdapter +import com.casic.br.ktd.databinding.ActivityTaskDetailBinding +import com.casic.br.ktd.vm.TaskViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant + +class TaskDetailActivity : KotlinBaseActivity() { + + private val kTag = "TaskDetailActivity" + override fun initEvent() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + val taskId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + val taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] + taskViewModel.getTaskDetail(taskId) + taskViewModel.detailResult.observe(this) { + if (it.code == 200) { + Log.d(kTag, "initOnCreate => ${it.data.size}") + if (it.data.size == 0) { + binding.taskDetailView.visibility = View.GONE + binding.emptyInclude.emptyLayout.visibility = View.VISIBLE + } else { + binding.taskDetailView.visibility = View.VISIBLE + binding.emptyInclude.emptyLayout.visibility = View.GONE + + val taskDetailAdapter = TaskDetailAdapter(this, it.data) + binding.taskDetailView.adapter = taskDetailAdapter + } + } + } + } + + override fun initViewBinding(): ActivityTaskDetailBinding { + return ActivityTaskDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bb27f43..c9820de 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,9 @@ + +) : RecyclerView.Adapter() { + + private val TYPE_TOP_TITLE = 0 + private val TYPE_ITEM_DATA = 1 + private var inflater: LayoutInflater = LayoutInflater.from(ctx) + + override fun getItemCount(): Int = dataRows.size + 1 + + override fun getItemViewType(position: Int): Int { + return if (position == 0) { + TYPE_TOP_TITLE + } else { + TYPE_ITEM_DATA + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + return if (viewType == TYPE_TOP_TITLE) { + ViewHolder(inflater.inflate(R.layout.item_task_detail_rv_l_title, parent, false)) + } else { + ViewHolder(inflater.inflate(R.layout.item_task_detail_rv_l, parent, false)) + } + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + if (holder.itemViewType == TYPE_ITEM_DATA) { + //绑定数据。标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 + val item = dataRows[position - 1] + + holder.setText(R.id.locateTimeView, item.ts) + .setText(R.id.gasValueView, item.gas) + .setText(R.id.horizontalAngleView, item.direction) + .setText(R.id.verticalAngleView, item.pitch) + .setText(R.id.isAlarmView, item.isAlarm) + .setText(R.id.alarmCodeView, item.alarmCode) + .setText(R.id.speedView, item.speed) + .setText(R.id.lngView, item.longitude) + .setText(R.id.latView, item.lagitude) + } else { + holder.setText(R.id.locateTimeView, "时间") + .setText(R.id.gasValueView, "气体浓度") + .setText(R.id.horizontalAngleView, "水平角度") + .setText(R.id.verticalAngleView, "垂直角度") + .setText(R.id.isAlarmView, "是否报警") + .setText(R.id.alarmCodeView, "报警编号") + .setText(R.id.speedView, "车速") + .setText(R.id.lngView, "经度") + .setText(R.id.latView, "纬度") + .setText(R.id.operationView, "操作") + } + + //item背景色 + if (position % 2 == 0) { + val linearLayout = holder.itemView.findViewById(R.id.rootView) + linearLayout.setBackgroundColor(Color.parseColor("#EEF1F6")) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt index bbe494d..b88846a 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt @@ -16,6 +16,7 @@ import com.casic.br.ktd.utils.LoadingDialogHub import com.casic.br.ktd.utils.LocaleConstant import com.casic.br.ktd.view.InspectionActivity +import com.casic.br.ktd.view.TaskDetailActivity import com.casic.br.ktd.vm.AlarmViewModel import com.casic.br.ktd.vm.TaskViewModel import com.casic.br.ktd.widgets.AlertControlDialog @@ -111,7 +112,7 @@ taskAdapter.setOnItemCheckedListener(object : TaskAdapter.OnItemCheckedListener { override fun onItemClicked(item: TaskListModel.DataModel.RowsModel) { - "点击${item.taskCode}".show(requireContext()) + requireContext().navigatePageTo(item.id) } override fun onItemChecked(items: ArrayList) { diff --git a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt new file mode 100644 index 0000000..0eafe3b --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt @@ -0,0 +1,54 @@ +package com.casic.br.ktd.view + +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.br.ktd.adapter.TaskDetailAdapter +import com.casic.br.ktd.databinding.ActivityTaskDetailBinding +import com.casic.br.ktd.vm.TaskViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant + +class TaskDetailActivity : KotlinBaseActivity() { + + private val kTag = "TaskDetailActivity" + override fun initEvent() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + val taskId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + val taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] + taskViewModel.getTaskDetail(taskId) + taskViewModel.detailResult.observe(this) { + if (it.code == 200) { + Log.d(kTag, "initOnCreate => ${it.data.size}") + if (it.data.size == 0) { + binding.taskDetailView.visibility = View.GONE + binding.emptyInclude.emptyLayout.visibility = View.VISIBLE + } else { + binding.taskDetailView.visibility = View.VISIBLE + binding.emptyInclude.emptyLayout.visibility = View.GONE + + val taskDetailAdapter = TaskDetailAdapter(this, it.data) + binding.taskDetailView.adapter = taskDetailAdapter + } + } + } + } + + override fun initViewBinding(): ActivityTaskDetailBinding { + return ActivityTaskDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt index bbf00af..6c6f8d2 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt @@ -78,8 +78,8 @@ val response = RetrofitServiceManager.getTaskDetail(taskId) val responseCode = response.separateResponseCode() if (responseCode == 200) { - addTaskResult.value = gson.fromJson( - response, object : TypeToken() {}.type + detailResult.value = gson.fromJson( + response, object : TypeToken() {}.type ) } }, { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bb27f43..c9820de 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,9 @@ + +) : RecyclerView.Adapter() { + + private val TYPE_TOP_TITLE = 0 + private val TYPE_ITEM_DATA = 1 + private var inflater: LayoutInflater = LayoutInflater.from(ctx) + + override fun getItemCount(): Int = dataRows.size + 1 + + override fun getItemViewType(position: Int): Int { + return if (position == 0) { + TYPE_TOP_TITLE + } else { + TYPE_ITEM_DATA + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + return if (viewType == TYPE_TOP_TITLE) { + ViewHolder(inflater.inflate(R.layout.item_task_detail_rv_l_title, parent, false)) + } else { + ViewHolder(inflater.inflate(R.layout.item_task_detail_rv_l, parent, false)) + } + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + if (holder.itemViewType == TYPE_ITEM_DATA) { + //绑定数据。标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 + val item = dataRows[position - 1] + + holder.setText(R.id.locateTimeView, item.ts) + .setText(R.id.gasValueView, item.gas) + .setText(R.id.horizontalAngleView, item.direction) + .setText(R.id.verticalAngleView, item.pitch) + .setText(R.id.isAlarmView, item.isAlarm) + .setText(R.id.alarmCodeView, item.alarmCode) + .setText(R.id.speedView, item.speed) + .setText(R.id.lngView, item.longitude) + .setText(R.id.latView, item.lagitude) + } else { + holder.setText(R.id.locateTimeView, "时间") + .setText(R.id.gasValueView, "气体浓度") + .setText(R.id.horizontalAngleView, "水平角度") + .setText(R.id.verticalAngleView, "垂直角度") + .setText(R.id.isAlarmView, "是否报警") + .setText(R.id.alarmCodeView, "报警编号") + .setText(R.id.speedView, "车速") + .setText(R.id.lngView, "经度") + .setText(R.id.latView, "纬度") + .setText(R.id.operationView, "操作") + } + + //item背景色 + if (position % 2 == 0) { + val linearLayout = holder.itemView.findViewById(R.id.rootView) + linearLayout.setBackgroundColor(Color.parseColor("#EEF1F6")) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt index bbe494d..b88846a 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt @@ -16,6 +16,7 @@ import com.casic.br.ktd.utils.LoadingDialogHub import com.casic.br.ktd.utils.LocaleConstant import com.casic.br.ktd.view.InspectionActivity +import com.casic.br.ktd.view.TaskDetailActivity import com.casic.br.ktd.vm.AlarmViewModel import com.casic.br.ktd.vm.TaskViewModel import com.casic.br.ktd.widgets.AlertControlDialog @@ -111,7 +112,7 @@ taskAdapter.setOnItemCheckedListener(object : TaskAdapter.OnItemCheckedListener { override fun onItemClicked(item: TaskListModel.DataModel.RowsModel) { - "点击${item.taskCode}".show(requireContext()) + requireContext().navigatePageTo(item.id) } override fun onItemChecked(items: ArrayList) { diff --git a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt new file mode 100644 index 0000000..0eafe3b --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt @@ -0,0 +1,54 @@ +package com.casic.br.ktd.view + +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.br.ktd.adapter.TaskDetailAdapter +import com.casic.br.ktd.databinding.ActivityTaskDetailBinding +import com.casic.br.ktd.vm.TaskViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant + +class TaskDetailActivity : KotlinBaseActivity() { + + private val kTag = "TaskDetailActivity" + override fun initEvent() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + val taskId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + val taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] + taskViewModel.getTaskDetail(taskId) + taskViewModel.detailResult.observe(this) { + if (it.code == 200) { + Log.d(kTag, "initOnCreate => ${it.data.size}") + if (it.data.size == 0) { + binding.taskDetailView.visibility = View.GONE + binding.emptyInclude.emptyLayout.visibility = View.VISIBLE + } else { + binding.taskDetailView.visibility = View.VISIBLE + binding.emptyInclude.emptyLayout.visibility = View.GONE + + val taskDetailAdapter = TaskDetailAdapter(this, it.data) + binding.taskDetailView.adapter = taskDetailAdapter + } + } + } + } + + override fun initViewBinding(): ActivityTaskDetailBinding { + return ActivityTaskDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt index bbf00af..6c6f8d2 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt @@ -78,8 +78,8 @@ val response = RetrofitServiceManager.getTaskDetail(taskId) val responseCode = response.separateResponseCode() if (responseCode == 200) { - addTaskResult.value = gson.fromJson( - response, object : TypeToken() {}.type + detailResult.value = gson.fromJson( + response, object : TypeToken() {}.type ) } }, { diff --git a/app/src/main/res/layout/activity_task_detail.xml b/app/src/main/res/layout/activity_task_detail.xml new file mode 100644 index 0000000..dc53d8f --- /dev/null +++ b/app/src/main/res/layout/activity_task_detail.xml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bb27f43..c9820de 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,9 @@ + +) : RecyclerView.Adapter() { + + private val TYPE_TOP_TITLE = 0 + private val TYPE_ITEM_DATA = 1 + private var inflater: LayoutInflater = LayoutInflater.from(ctx) + + override fun getItemCount(): Int = dataRows.size + 1 + + override fun getItemViewType(position: Int): Int { + return if (position == 0) { + TYPE_TOP_TITLE + } else { + TYPE_ITEM_DATA + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + return if (viewType == TYPE_TOP_TITLE) { + ViewHolder(inflater.inflate(R.layout.item_task_detail_rv_l_title, parent, false)) + } else { + ViewHolder(inflater.inflate(R.layout.item_task_detail_rv_l, parent, false)) + } + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + if (holder.itemViewType == TYPE_ITEM_DATA) { + //绑定数据。标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 + val item = dataRows[position - 1] + + holder.setText(R.id.locateTimeView, item.ts) + .setText(R.id.gasValueView, item.gas) + .setText(R.id.horizontalAngleView, item.direction) + .setText(R.id.verticalAngleView, item.pitch) + .setText(R.id.isAlarmView, item.isAlarm) + .setText(R.id.alarmCodeView, item.alarmCode) + .setText(R.id.speedView, item.speed) + .setText(R.id.lngView, item.longitude) + .setText(R.id.latView, item.lagitude) + } else { + holder.setText(R.id.locateTimeView, "时间") + .setText(R.id.gasValueView, "气体浓度") + .setText(R.id.horizontalAngleView, "水平角度") + .setText(R.id.verticalAngleView, "垂直角度") + .setText(R.id.isAlarmView, "是否报警") + .setText(R.id.alarmCodeView, "报警编号") + .setText(R.id.speedView, "车速") + .setText(R.id.lngView, "经度") + .setText(R.id.latView, "纬度") + .setText(R.id.operationView, "操作") + } + + //item背景色 + if (position % 2 == 0) { + val linearLayout = holder.itemView.findViewById(R.id.rootView) + linearLayout.setBackgroundColor(Color.parseColor("#EEF1F6")) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt index bbe494d..b88846a 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt @@ -16,6 +16,7 @@ import com.casic.br.ktd.utils.LoadingDialogHub import com.casic.br.ktd.utils.LocaleConstant import com.casic.br.ktd.view.InspectionActivity +import com.casic.br.ktd.view.TaskDetailActivity import com.casic.br.ktd.vm.AlarmViewModel import com.casic.br.ktd.vm.TaskViewModel import com.casic.br.ktd.widgets.AlertControlDialog @@ -111,7 +112,7 @@ taskAdapter.setOnItemCheckedListener(object : TaskAdapter.OnItemCheckedListener { override fun onItemClicked(item: TaskListModel.DataModel.RowsModel) { - "点击${item.taskCode}".show(requireContext()) + requireContext().navigatePageTo(item.id) } override fun onItemChecked(items: ArrayList) { diff --git a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt new file mode 100644 index 0000000..0eafe3b --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt @@ -0,0 +1,54 @@ +package com.casic.br.ktd.view + +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.br.ktd.adapter.TaskDetailAdapter +import com.casic.br.ktd.databinding.ActivityTaskDetailBinding +import com.casic.br.ktd.vm.TaskViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant + +class TaskDetailActivity : KotlinBaseActivity() { + + private val kTag = "TaskDetailActivity" + override fun initEvent() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + val taskId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + val taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] + taskViewModel.getTaskDetail(taskId) + taskViewModel.detailResult.observe(this) { + if (it.code == 200) { + Log.d(kTag, "initOnCreate => ${it.data.size}") + if (it.data.size == 0) { + binding.taskDetailView.visibility = View.GONE + binding.emptyInclude.emptyLayout.visibility = View.VISIBLE + } else { + binding.taskDetailView.visibility = View.VISIBLE + binding.emptyInclude.emptyLayout.visibility = View.GONE + + val taskDetailAdapter = TaskDetailAdapter(this, it.data) + binding.taskDetailView.adapter = taskDetailAdapter + } + } + } + } + + override fun initViewBinding(): ActivityTaskDetailBinding { + return ActivityTaskDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt index bbf00af..6c6f8d2 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt @@ -78,8 +78,8 @@ val response = RetrofitServiceManager.getTaskDetail(taskId) val responseCode = response.separateResponseCode() if (responseCode == 200) { - addTaskResult.value = gson.fromJson( - response, object : TypeToken() {}.type + detailResult.value = gson.fromJson( + response, object : TypeToken() {}.type ) } }, { diff --git a/app/src/main/res/layout/activity_task_detail.xml b/app/src/main/res/layout/activity_task_detail.xml new file mode 100644 index 0000000..dc53d8f --- /dev/null +++ b/app/src/main/res/layout/activity_task_detail.xml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_task_detail_rv_l.xml b/app/src/main/res/layout/item_task_detail_rv_l.xml new file mode 100644 index 0000000..9f30fe3 --- /dev/null +++ b/app/src/main/res/layout/item_task_detail_rv_l.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bb27f43..c9820de 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,6 +53,9 @@ + +) : RecyclerView.Adapter() { + + private val TYPE_TOP_TITLE = 0 + private val TYPE_ITEM_DATA = 1 + private var inflater: LayoutInflater = LayoutInflater.from(ctx) + + override fun getItemCount(): Int = dataRows.size + 1 + + override fun getItemViewType(position: Int): Int { + return if (position == 0) { + TYPE_TOP_TITLE + } else { + TYPE_ITEM_DATA + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + return if (viewType == TYPE_TOP_TITLE) { + ViewHolder(inflater.inflate(R.layout.item_task_detail_rv_l_title, parent, false)) + } else { + ViewHolder(inflater.inflate(R.layout.item_task_detail_rv_l, parent, false)) + } + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + if (holder.itemViewType == TYPE_ITEM_DATA) { + //绑定数据。标题已经把position=0占用,但是size+1,所以需要数据绑定实际position-1 + val item = dataRows[position - 1] + + holder.setText(R.id.locateTimeView, item.ts) + .setText(R.id.gasValueView, item.gas) + .setText(R.id.horizontalAngleView, item.direction) + .setText(R.id.verticalAngleView, item.pitch) + .setText(R.id.isAlarmView, item.isAlarm) + .setText(R.id.alarmCodeView, item.alarmCode) + .setText(R.id.speedView, item.speed) + .setText(R.id.lngView, item.longitude) + .setText(R.id.latView, item.lagitude) + } else { + holder.setText(R.id.locateTimeView, "时间") + .setText(R.id.gasValueView, "气体浓度") + .setText(R.id.horizontalAngleView, "水平角度") + .setText(R.id.verticalAngleView, "垂直角度") + .setText(R.id.isAlarmView, "是否报警") + .setText(R.id.alarmCodeView, "报警编号") + .setText(R.id.speedView, "车速") + .setText(R.id.lngView, "经度") + .setText(R.id.latView, "纬度") + .setText(R.id.operationView, "操作") + } + + //item背景色 + if (position % 2 == 0) { + val linearLayout = holder.itemView.findViewById(R.id.rootView) + linearLayout.setBackgroundColor(Color.parseColor("#EEF1F6")) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt index bbe494d..b88846a 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/TaskPageFragment.kt @@ -16,6 +16,7 @@ import com.casic.br.ktd.utils.LoadingDialogHub import com.casic.br.ktd.utils.LocaleConstant import com.casic.br.ktd.view.InspectionActivity +import com.casic.br.ktd.view.TaskDetailActivity import com.casic.br.ktd.vm.AlarmViewModel import com.casic.br.ktd.vm.TaskViewModel import com.casic.br.ktd.widgets.AlertControlDialog @@ -111,7 +112,7 @@ taskAdapter.setOnItemCheckedListener(object : TaskAdapter.OnItemCheckedListener { override fun onItemClicked(item: TaskListModel.DataModel.RowsModel) { - "点击${item.taskCode}".show(requireContext()) + requireContext().navigatePageTo(item.id) } override fun onItemChecked(items: ArrayList) { diff --git a/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt new file mode 100644 index 0000000..0eafe3b --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/view/TaskDetailActivity.kt @@ -0,0 +1,54 @@ +package com.casic.br.ktd.view + +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.br.ktd.adapter.TaskDetailAdapter +import com.casic.br.ktd.databinding.ActivityTaskDetailBinding +import com.casic.br.ktd.vm.TaskViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.utils.Constant + +class TaskDetailActivity : KotlinBaseActivity() { + + private val kTag = "TaskDetailActivity" + override fun initEvent() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + val taskId = intent.getStringExtra(Constant.INTENT_PARAM)!! + + val taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] + taskViewModel.getTaskDetail(taskId) + taskViewModel.detailResult.observe(this) { + if (it.code == 200) { + Log.d(kTag, "initOnCreate => ${it.data.size}") + if (it.data.size == 0) { + binding.taskDetailView.visibility = View.GONE + binding.emptyInclude.emptyLayout.visibility = View.VISIBLE + } else { + binding.taskDetailView.visibility = View.VISIBLE + binding.emptyInclude.emptyLayout.visibility = View.GONE + + val taskDetailAdapter = TaskDetailAdapter(this, it.data) + binding.taskDetailView.adapter = taskDetailAdapter + } + } + } + } + + override fun initViewBinding(): ActivityTaskDetailBinding { + return ActivityTaskDetailBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt index bbf00af..6c6f8d2 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt @@ -78,8 +78,8 @@ val response = RetrofitServiceManager.getTaskDetail(taskId) val responseCode = response.separateResponseCode() if (responseCode == 200) { - addTaskResult.value = gson.fromJson( - response, object : TypeToken() {}.type + detailResult.value = gson.fromJson( + response, object : TypeToken() {}.type ) } }, { diff --git a/app/src/main/res/layout/activity_task_detail.xml b/app/src/main/res/layout/activity_task_detail.xml new file mode 100644 index 0000000..dc53d8f --- /dev/null +++ b/app/src/main/res/layout/activity_task_detail.xml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_task_detail_rv_l.xml b/app/src/main/res/layout/item_task_detail_rv_l.xml new file mode 100644 index 0000000..9f30fe3 --- /dev/null +++ b/app/src/main/res/layout/item_task_detail_rv_l.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_task_detail_rv_l_title.xml b/app/src/main/res/layout/item_task_detail_rv_l_title.xml new file mode 100644 index 0000000..9f30fe3 --- /dev/null +++ b/app/src/main/res/layout/item_task_detail_rv_l_title.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file