diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt index 7ebdb43a..dd6b949b 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt @@ -38,6 +38,7 @@ import com.navinfo.omqs.http.offlinemapdownload.OfflineMapDownloadManager import com.navinfo.omqs.tools.LayerConfigUtils import com.navinfo.omqs.ui.activity.BaseActivity import com.navinfo.omqs.ui.fragment.console.ConsoleFragment +import com.navinfo.omqs.ui.fragment.itemlist.ItemListFragment import com.navinfo.omqs.ui.fragment.offlinemap.OfflineMapFragment import com.navinfo.omqs.ui.fragment.qsrecordlist.QsRecordListFragment import com.navinfo.omqs.ui.fragment.signMoreInfo.SignMoreInfoFragment @@ -390,6 +391,25 @@ class MainActivity : BaseActivity() { } } + viewModel.liveDataItemList.observe(this) { + if (leftFragment == null || leftFragment !is ItemListFragment) { + leftFragment = ItemListFragment { + binding.mainActivityLeftFragment.visibility = View.GONE + supportFragmentManager.beginTransaction().remove(leftFragment!!).commit() + leftFragment = null + null + } + binding.mainActivityLeftFragment.visibility = View.VISIBLE + supportFragmentManager.beginTransaction() + .replace(R.id.main_activity_left_fragment, leftFragment!!) + .commit() + } else { + supportFragmentManager.beginTransaction() + .show(leftFragment!!) + .commit() + } + } + lifecycleScope.launch { // 初始化地图图层控制接收器 FlowEventBus.subscribe<List<ImportConfig>>( diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt index 8beb2dbb..4cecddfa 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt @@ -112,6 +112,11 @@ class MainViewModel @Inject constructor( */ val liveDataSignMoreInfo = MutableLiveData<RenderEntity>() + /** + * 捕捉到的itemList + */ + val liveDataItemList = MutableLiveData<List<RenderEntity>>() + private var traceTag: String = "TRACE_TAG" /** @@ -473,8 +478,10 @@ class MainViewModel @Inject constructor( ) ) - if (itemList.size > 0) { + if (itemList.size == 1) { liveDataSignMoreInfo.postValue(itemList[0]) + } else { + liveDataItemList.postValue(itemList) } } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/itemlist/ItemAdapter.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/itemlist/ItemAdapter.kt new file mode 100644 index 00000000..5667a982 --- /dev/null +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/itemlist/ItemAdapter.kt @@ -0,0 +1,30 @@ +package com.navinfo.omqs.ui.fragment.itemlist + +import android.view.LayoutInflater +import android.view.ViewGroup +import com.navinfo.collect.library.data.entity.RenderEntity +import com.navinfo.collect.library.enums.DataCodeEnum +import com.navinfo.omqs.databinding.AdapterItemBinding +import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter +import com.navinfo.omqs.ui.other.BaseViewHolder + +class ItemAdapter(private var itemListener: ((Int, RenderEntity) -> Unit?)? = null) : + BaseRecyclerViewAdapter<RenderEntity>() { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder { + val viewBinding = + AdapterItemBinding.inflate(LayoutInflater.from(parent.context), parent, false) + return BaseViewHolder(viewBinding) + } + + override fun onBindViewHolder(holder: BaseViewHolder, position: Int) { + val binding = holder.viewBinding as AdapterItemBinding + var renderEntity = data[position] + + binding.name.text = DataCodeEnum.findTableNameByCode(renderEntity.code) + binding.root.setOnClickListener { + if (itemListener != null) { + itemListener!!.invoke(position, renderEntity) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/itemlist/ItemListFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/itemlist/ItemListFragment.kt new file mode 100644 index 00000000..cfbab4d6 --- /dev/null +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/itemlist/ItemListFragment.kt @@ -0,0 +1,51 @@ +package com.navinfo.omqs.ui.fragment.itemlist + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.navinfo.omqs.databinding.FragmentItemListBinding +import com.navinfo.omqs.ui.activity.map.MainViewModel +import com.navinfo.omqs.ui.fragment.BaseFragment +import com.navinfo.omqs.ui.widget.RecycleViewDivider +import dagger.hilt.android.AndroidEntryPoint + + +@AndroidEntryPoint +class ItemListFragment(private var backListener: ((ItemListFragment) -> Unit?)? = null) : + BaseFragment() { + private var _binding: FragmentItemListBinding? = null + private val binding get() = _binding!! + private val viewModel by activityViewModels<MainViewModel>() + private val adapter by lazy { + ItemAdapter { _, data -> + viewModel.showSignMoreInfo(data) + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + _binding = FragmentItemListBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + binding.itemListRecyclerview.layoutManager = LinearLayoutManager(requireContext()) + binding.itemListRecyclerview.adapter = adapter + binding.itemListRecyclerview.addItemDecoration( + RecycleViewDivider( + requireContext(), + LinearLayoutManager.VERTICAL + ) + ) + viewModel.liveDataItemList.observe(viewLifecycleOwner) { + adapter.refreshData(it) + } + binding.taskBack.setOnClickListener { + backListener?.invoke(this) + } + } +} diff --git a/app/src/main/res/layout/adapter_item.xml b/app/src/main/res/layout/adapter_item.xml new file mode 100644 index 00000000..38b68113 --- /dev/null +++ b/app/src/main/res/layout/adapter_item.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:padding="5dp"> + + <TextView + android:id="@+id/name" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="name" + android:textColor="@color/black" + android:textSize="16sp" /> +</FrameLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_item_list.xml b/app/src/main/res/layout/fragment_item_list.xml new file mode 100644 index 00000000..1a043b4c --- /dev/null +++ b/app/src/main/res/layout/fragment_item_list.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout 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" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@drawable/shape_left_fragment_bg" + tools:context=".ui.fragment.itemlist.ItemListFragment"> + + <androidx.appcompat.widget.AppCompatImageView + android:id="@+id/task_back" + style="@style/btn_round" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="5dp" + android:background="@drawable/selector_bg_round_button" + android:foreground="@drawable/ripple_btn_press" + android:src="@drawable/ic_baseline_keyboard_arrow_left_24" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <TextView + android:id="@+id/task_fragment_title" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="15dp" + android:text="捕捉列表" + android:textColor="@color/default_blue_text_color" + android:textSize="16sp" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/item_list_recyclerview" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_marginTop="10dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@id/task_fragment_title" /> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_task_manager.xml b/app/src/main/res/layout/fragment_task_manager.xml index f533d173..d2c85a65 100644 --- a/app/src/main/res/layout/fragment_task_manager.xml +++ b/app/src/main/res/layout/fragment_task_manager.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> -<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" +<androidx.constraintlayout.widget.ConstraintLayout + 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" android:layout_width="match_parent" diff --git a/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt b/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt index f8995d5c..539457f9 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt @@ -61,6 +61,18 @@ enum class DataCodeEnum(var tableName: String, var code: String) { OMDB_ELECTRONICEYE("电子眼", "4010"), OMDB_TRAFFICLIGHT("交通灯", "4022"), OMDB_LANEINFO("车信", "4601"), - OMDB_LANE_LINK_LG("车道中心线", "5001") + OMDB_LANE_LINK_LG("车道中心线", "5001"); + + companion object { + fun findTableNameByCode(code: String): String? { + for (enumInstance in DataCodeEnum.values()) { + if (enumInstance.code == code) { + return enumInstance.tableName + } + } + return null // 若未找到匹配的 code,则返回 null 或其他适当的默认值 + } + } } +