diff --git a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt index 46b3524..3a1eaf1 100644 --- a/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/smarttube/fragment/HomePageFragment.kt @@ -2,6 +2,7 @@ import android.graphics.Point import android.os.Bundle +import android.os.Handler import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -33,9 +34,11 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.obtainScreenHeight import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.vm.LoadState import com.pengxh.kt.lite.widget.EasyPopupWindow import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_group_device.* import kotlinx.android.synthetic.main.fragment_home.view.* class HomePageFragment : Fragment(), AMap.OnMapLoadedListener, AMap.OnCameraChangeListener, @@ -44,10 +47,13 @@ private val kTag = "HomePageFragment" private lateinit var homeView: View private lateinit var dialogManager: DialogManager + private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var aMap: AMap private lateinit var deviceViewModel: DeviceViewModel private lateinit var groupViewModel: ProjectGroupViewModel private lateinit var groupListAdapter: GroupListAdapter + private var dataBeans: MutableList = ArrayList() + private var isRefresh = false /** * 所有的marker @@ -75,6 +81,7 @@ homeView = inflater.inflate(R.layout.fragment_home, container, false) dialogManager = DialogManager.obtainInstance(requireActivity()) + weakReferenceHandler = WeakReferenceHandler(callback) val easyPopupWindow = EasyPopupWindow(requireContext()) easyPopupWindow.setPopupMenuItem(LocaleConstant.POPUP_IMAGES, LocaleConstant.POPUP_TITLES) homeView.rightOptionView.setOnClickListener { @@ -108,22 +115,17 @@ deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java) + //默认数据 TODO http://111.198.10.15:11311/tube/groupdevice/list?wellGroupId=hallo 返回值需要加上组下面设备总数 + groupViewModel.obtainProGroupList() + //地图初始化 initMap(savedInstanceState) homeView.addDeviceButton.setOnClickListener { requireContext().navigatePageTo() } - return homeView - } - override fun onResume() { - super.onResume() - homeView.mapView.onResume() - //获取所有设备数据 - deviceViewModel.obtainMapDeviceList() - //获取组 - groupViewModel.obtainProGroupList() + //数据监听 deviceViewModel.mapDeviceModel.observe(this, { if (it.code == 200) { if (allMarkerOptions.isNotEmpty()) { @@ -160,45 +162,19 @@ }) groupViewModel.groupModel.observe(this, { if (it.code == 200) { - bindRecyclerView(it.data) - } - }) - } - - private fun initMap(savedInstanceState: Bundle?) { - homeView.mapView.onCreate(savedInstanceState) - aMap = homeView.mapView.map - aMap.mapType = AMap.MAP_TYPE_NORMAL - val uiSettings = aMap.uiSettings - uiSettings.isCompassEnabled = true - uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER - uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 - uiSettings.isRotateGesturesEnabled = false//不允许地图旋转 - - // 地图加载成功监听 - aMap.addOnMapLoadedListener(this) - // 地图缩放监听 - aMap.addOnCameraChangeListener(this) - // marker 点击事件监听 - aMap.addOnMarkerClickListener(this) - // 点击marker弹出自定义popup - aMap.setInfoWindowAdapter(this) - // 点击popup - aMap.setOnInfoWindowClickListener(this) - } - - private fun bindRecyclerView(dataBeans: MutableList) { - groupListAdapter = GroupListAdapter(requireContext(), dataBeans) - homeView.homeRecyclerView!!.addItemDecoration( - DividerItemDecoration( - requireContext(), DividerItemDecoration.VERTICAL - ) - ) - homeView.homeRecyclerView!!.adapter = groupListAdapter - groupListAdapter.setOnItemClickListener(object : GroupListAdapter.OnItemClickListener { - override fun onClicked(position: Int) { - // 根据groupId查询组下设备 - groupViewModel.obtainDeviceListByGroup(dataBeans[position].groupId) + val dataRows = it.data + when { + isRefresh -> { + dataBeans.clear() + dataBeans = dataRows!! + groupDeviceLayout.finishRefresh() + isRefresh = false + } + else -> { + dataBeans = dataRows!! + } + } + weakReferenceHandler.sendEmptyMessage(2022090201) } }) groupViewModel.groupDeviceModel.observe(this, { @@ -224,12 +200,67 @@ moveToPosition(centerLatLng) } }) - groupViewModel.loadState.observe(this, { - when (it) { - LoadState.Loading -> dialogManager.showLoadingDialog("数据加载中...") - else -> dialogManager.dismissLoadingDialog() + return homeView + } + + override fun onResume() { + super.onResume() + homeView.mapView.onResume() + //获取所有设备数据 + deviceViewModel.obtainMapDeviceList() + + //获取组 + groupViewModel.obtainProGroupList() + } + + private val callback = Handler.Callback { + if (it.what == 2022090201) { + if (isRefresh) { + groupListAdapter.notifyDataSetChanged() + } else { + groupListAdapter = GroupListAdapter(requireContext(), dataBeans) + homeView.homeRecyclerView!!.addItemDecoration( + DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) + ) + homeView.homeRecyclerView!!.adapter = groupListAdapter + groupViewModel.loadState.observe(this, { state -> + when (state) { + LoadState.Loading -> dialogManager.showLoadingDialog("数据加载中...") + else -> dialogManager.dismissLoadingDialog() + } + }) + groupListAdapter.setOnItemClickListener(object : + GroupListAdapter.OnItemClickListener { + override fun onClicked(position: Int) { + // 根据groupId查询组下设备 + groupViewModel.obtainDeviceListByGroup(dataBeans[position].groupId) + } + }) } - }) + } + true + } + + private fun initMap(savedInstanceState: Bundle?) { + homeView.mapView.onCreate(savedInstanceState) + aMap = homeView.mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + uiSettings.isRotateGesturesEnabled = false//不允许地图旋转 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + // marker 点击事件监听 + aMap.addOnMarkerClickListener(this) + // 点击marker弹出自定义popup + aMap.setInfoWindowAdapter(this) + // 点击popup + aMap.setOnInfoWindowClickListener(this) } //移动到指定经纬度