Browse Source

@task: device type

bai 3 years ago
parent
commit
5ade3f8c8e

+ 10 - 2
demo/src/main/java/com/sybotan/android/demo/activities/poc/DeviceActivity.kt

@@ -10,6 +10,7 @@ import android.widget.TextView
 import android.widget.Toast
 import com.sybotan.android.demo.R
 import com.sybotan.android.demo.activities.BaseActivity
+import com.sybotan.android.demo.entitiies.DeviceType
 import com.zbar.lib.CaptureActivity
 
 class DeviceActivity : BaseActivity() {
@@ -29,10 +30,16 @@ class DeviceActivity : BaseActivity() {
     private lateinit var infoMsgTv: TextView
     private lateinit var infoOkIv: ImageView
 
+    private lateinit var deviceOkIv: ImageView
+    private lateinit var deviceInfoTv: TextView
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_device)
         val deviceCl = findViewById<ConstraintLayout>(R.id.deviceCl)
+        deviceOkIv = findViewById(R.id.deviceOkIv)
+        deviceInfoTv = findViewById(R.id.deviceInfoTv)
+
         deviceCl.setOnClickListener {
             val intent = Intent(this, DeviceTypeActivity::class.java)
             startActivityForResult(intent, REQ_CODE_DEVICE)
@@ -70,8 +77,9 @@ class DeviceActivity : BaseActivity() {
         // 设备信息
         if (requestCode == REQ_CODE_DEVICE && resultCode == RES_CODE_DEVICE) {
             val bundle = data?.extras
-            val device = bundle?.getString("device") ?: ""
-            Toast.makeText(this, "device:$device", Toast.LENGTH_LONG).show()
+            val type = bundle?.getParcelable<DeviceType?>("type")
+            deviceInfoTv.text = type?.name ?: ""
+            deviceOkIv.visibility = if (type != null) View.VISIBLE else View.INVISIBLE
         }
 
         // 二维码信息

+ 18 - 23
demo/src/main/java/com/sybotan/android/demo/activities/poc/DeviceTypeActivity.kt

@@ -1,11 +1,14 @@
 package com.sybotan.android.demo.activities.poc
 
+import android.content.Intent
 import android.os.Bundle
+import android.widget.Button
 import android.widget.ImageView
 import android.widget.ListView
 import com.sybotan.android.demo.R
 import com.sybotan.android.demo.activities.BaseActivity
-import com.sybotan.android.demo.entitiies.Device
+import com.sybotan.android.demo.adapter.DeviceTypeAdapter
+import com.sybotan.android.demo.entitiies.DeviceType
 import com.sybotan.android.demo.retrofit.BaseViewModelInterface
 import com.sybotan.android.demo.viewmodel.DeviceVM
 
@@ -15,40 +18,32 @@ class DeviceTypeActivity : BaseActivity() {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_device_type)
         typeLv = findViewById(R.id.typeLv)
-        /* val adapter = TreeAdapter(datas(), this, typeLv)
-         typeLv.adapter = adapter*/
-
-        /* adapter.setOnTreeNodeClickListener(object : OnTreeNodeClickListener<Data> {
-             override fun onClick(node: Node<Data>, position: Int) {
-                 if (!node.isLeaf) return
-                 val intent = Intent()
-                 intent.putExtra("device", "${node.data.label} -> 13213213213")
-                 setResult(1, intent)
-                 finish()
-             }
-
-         })*/
+
         val backIv = findViewById<ImageView>(R.id.backIv)
         backIv.setOnClickListener {
             finish()
         }
 
-
-        /*val saveBtn = findViewById<Button>(R.id.saveBtn)
+        val saveBtn = findViewById<Button>(R.id.saveBtn)
         saveBtn.setOnClickListener {
             val intent = Intent()
-            intent.putExtra("device", "13213213213")
-            setResult(1, intent)
-        }*/
+            intent.putExtra("type", mType)
+            setResult(DeviceActivity.RES_CODE_DEVICE, intent)
+            finish()
+        }
         initViewModel()
     }
 
+
+    var mType: DeviceType? = null
+
     private fun initViewModel() {
         val deviceVM = DeviceVM(BaseViewModelInterface { name, params ->
-            val types = params as List<Device>
-
-            //val adapter = TreeAdapter(types, this, typeLv)
-            // typeLv.adapter = adapter
+            val types = params as List<DeviceType>
+            val adapter = DeviceTypeAdapter(types, this@DeviceTypeActivity) {
+                mType = it
+            }
+            typeLv.adapter = adapter
         }, this)
 
         deviceVM.getDeviceType()

+ 77 - 0
demo/src/main/java/com/sybotan/android/demo/adapter/DeviceTypeAdapter.kt

@@ -0,0 +1,77 @@
+package com.sybotan.android.demo.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.BaseAdapter
+import android.widget.CheckBox
+import android.widget.RadioButton
+import com.sybotan.android.demo.R
+import com.sybotan.android.demo.entitiies.DeviceType
+
+class DeviceTypeAdapter(
+    val types: List<DeviceType>,
+    val context: Context,
+    val block: (type: DeviceType) -> Unit
+) : BaseAdapter() {
+
+
+    private var checkType: DeviceType? = null
+    private val holders = mutableListOf<Holder>()
+    override fun getCount(): Int {
+        return types.size
+    }
+
+    override fun getItem(position: Int): DeviceType {
+        return types[position]
+    }
+
+    override fun getItemId(position: Int): Long {
+        return position.toLong()
+    }
+
+    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
+        var view = convertView
+        val holder: Holder
+        if (view == null) {
+            holder = Holder()
+            view = LayoutInflater.from(context).inflate(R.layout.item_device, parent, false)
+            holder.deviceCb = view.findViewById(R.id.deviceCb)
+
+            view.tag = holder
+        } else {
+            holder = view.tag as Holder
+        }
+        holders.add(holder)
+        val type = types[position]
+        holder.deviceCb.text = type.name
+        holder.deviceCb.setOnClickListener {
+            holders.forEach { h ->
+                h.deviceCb.isSelected = false
+                h.deviceCb.isChecked = false
+            }
+            val cb = it as CheckBox
+            if (!cb.isSelected) {
+                cb.isSelected = true
+                cb.isChecked = true
+                checkType = type
+              //  checkTypes.add(type)
+
+            } else {
+                cb.isSelected = false
+                cb.isChecked = false
+                checkType = type
+             //   checkTypes.remove(type)
+            }
+
+            block(checkType!!)
+        }
+        return view!!
+    }
+
+    inner class Holder {
+        lateinit var deviceCb: CheckBox
+    }
+
+}

+ 14 - 2
demo/src/main/java/com/sybotan/android/demo/entitiies/DeviceEntity.kt

@@ -1,10 +1,22 @@
 package com.sybotan.android.demo.entitiies
 
+import android.os.Parcelable
 import com.sybotan.android.demo.tree.TreeNodeId
 import com.sybotan.android.demo.tree.TreeNodeLabel
 import com.sybotan.android.demo.tree.TreeNodePid
+import kotlinx.android.parcel.Parcelize
 
-data class Device(
+@Parcelize
+data class DeviceType(
+    val major: String,       // 专业编码
+    val majorName: String,   // 专业名字
+    val sys: String,         // 系统编码
+    val sysName: String,     // 系统名字
+    val code: String,        // 设备编码
+    val name: String         // 设备名字
+):Parcelable
+
+data class Device2(
     @TreeNodeId
     val id: String,
     @TreeNodePid
@@ -19,7 +31,7 @@ data class Device(
 
     val parentCode: String,     // 父编码
     val objType: String,        // 对象类型
-    val children: List<Device>,
+    val children: List<DeviceType>,
 
     val type: String,
     val aliasCode: String,

+ 3 - 5
demo/src/main/java/com/sybotan/android/demo/retrofit/API.java

@@ -2,9 +2,7 @@ package com.sybotan.android.demo.retrofit;
 
 
 import com.sybotan.android.demo.bean.BaseModel;
-import com.sybotan.android.demo.entitiies.Device;
-import com.sybotan.android.demo.entitiies.MajorEntity;
-import com.sybotan.android.demo.entitiies.SystemEntity;
+import com.sybotan.android.demo.entitiies.DeviceType;
 import com.sybotan.android.demo.bean.result.SpaceJobModel;
 
 import java.util.List;
@@ -95,7 +93,7 @@ public interface API {
     /**
      * 查询设备类型
      */
-    @POST("clmt/dict/sys_eq")
-    Observable<BaseModel<List<Device>>> requestDeviceTypeJob();
+    @POST("clmt/dict/sys_eq_list")
+    Observable<BaseModel<List<DeviceType>>> requestDeviceTypeJob();
 
 }

+ 3 - 3
demo/src/main/java/com/sybotan/android/demo/viewmodel/DeviceVM.kt

@@ -1,7 +1,7 @@
 package com.sybotan.android.demo.viewmodel
 
 import com.sybotan.android.demo.activities.BaseActivity
-import com.sybotan.android.demo.entitiies.Device
+import com.sybotan.android.demo.entitiies.DeviceType
 import com.sybotan.android.demo.retrofit.BaseObserver
 import com.sybotan.android.demo.retrofit.BaseViewModelInterface
 import com.sybotan.android.demo.retrofit.RetrofitFactory
@@ -13,8 +13,8 @@ class DeviceVM(b: BaseViewModelInterface, a: BaseActivity) : BaseViewModel(b, a)
 
     fun getDeviceType() {
         val observable = RetrofitFactory.getInstance().requestDeviceTypeJob()
-        this.sendRequest(observable, object : BaseObserver<List<Device>>(mActivity, this) {
-            override fun onSuccess(t: List<Device>?) {
+        this.sendRequest(observable, object : BaseObserver<List<DeviceType>>(mActivity, this) {
+            override fun onSuccess(t: List<DeviceType>?) {
                 mEmitter.SendDircetive(DEVICE_TYPE, t)
             }
         }, true)

+ 0 - 1
demo/src/main/res/layout/activity_device.xml

@@ -162,7 +162,6 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginEnd="16dp"
-                android:text="空气传感器"
                 android:textColor="@color/black_272727"
                 android:textSize="14sp"
                 app:layout_constraintBottom_toBottomOf="@id/deviceDetailIv"

+ 16 - 1
demo/src/main/res/layout/activity_device_type.xml

@@ -44,8 +44,23 @@
         android:id="@+id/typeLv"
         android:layout_width="0dp"
         android:layout_height="0dp"
-        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintBottom_toTopOf="@+id/saveBtn"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@id/topBarCl" />
+
+    <Button
+        android:id="@+id/saveBtn"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="32dp"
+        android:layout_marginTop="8dp"
+        android:layout_marginEnd="32dp"
+        android:layout_marginBottom="8dp"
+        android:text="保存"
+        android:textSize="20sp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/typeLv" />
 </android.support.constraint.ConstraintLayout>

+ 18 - 0
demo/src/main/res/layout/item_device.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="48dp">
+
+    <CheckBox
+        android:id="@+id/deviceCb"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="12dp"
+        android:gravity="center"
+        android:text="空调"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+</android.support.constraint.ConstraintLayout>