From ebbb9b99b2076ad90d915c00d219bc17eae6230a Mon Sep 17 00:00:00 2001 From: squallzhjch Date: Thu, 4 May 2023 14:10:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=9C=8B=E6=9D=BF=E8=BF=9B?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=BC=96=E8=BE=91=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 3 ++ .../java/com/navinfo/omqs/bean/SignBean.kt | 15 ++++++++ .../com/navinfo/omqs/db/RealmOperateHelper.kt | 8 +++-- .../omqs/ui/activity/map/MainActivity.kt | 27 ++++++++++---- .../omqs/ui/activity/map/MainViewModel.kt | 12 +++---- .../omqs/ui/activity/map/SignAdapter.kt | 8 +++-- .../navinfo/omqs/ui/activity/map/SignBean.kt | 8 ----- .../EvaluationResultFragment.kt | 22 ++++++++---- .../EvaluationResultViewModel.kt | 36 ++++++++++++++----- .../fragment/evaluationresult/LeftAdapter.kt | 3 ++ .../qsrecordlist/QsRecordListFragment.kt | 2 +- .../res/layout/fragment_evaluation_result.xml | 6 ++-- .../navigation/right_fragment_nav_graph.xml | 19 +++++++--- build.gradle | 2 ++ .../library/map/handler/LineHandler.kt | 2 +- 15 files changed, 121 insertions(+), 52 deletions(-) create mode 100644 app/src/main/java/com/navinfo/omqs/bean/SignBean.kt delete mode 100644 app/src/main/java/com/navinfo/omqs/ui/activity/map/SignBean.kt diff --git a/app/build.gradle b/app/build.gradle index 1ac69655..330c97cc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,6 +5,7 @@ plugins { id 'com.google.dagger.hilt.android' id 'realm-android' id 'kotlin-parcelize' // 序列化 + id 'androidx.navigation.safeargs.kotlin'//Safe Args传递数据 } android { namespace 'com.navinfo.omqs' @@ -109,6 +110,8 @@ dependencies { // 读取spatialite文件 implementation 'com.github.sevar83:android-spatialite:2.0.1' + //fragment 传递数据 + implementation "androidx.navigation:navigation-ui-ktx:2.5.3" } //允许引用生成的代码 kapt { diff --git a/app/src/main/java/com/navinfo/omqs/bean/SignBean.kt b/app/src/main/java/com/navinfo/omqs/bean/SignBean.kt new file mode 100644 index 00000000..30bbe143 --- /dev/null +++ b/app/src/main/java/com/navinfo/omqs/bean/SignBean.kt @@ -0,0 +1,15 @@ +package com.navinfo.omqs.bean + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +@Parcelize +data class SignBean( + //图标ID + val iconId: Int, + val distance: Int = 0, + val iconText: String = "", + val elementId: String = "", + val linkId: String, + val geometry: String, +) : Parcelable \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt index 9bb6be80..3bedd606 100644 --- a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt @@ -20,7 +20,6 @@ import org.oscim.core.MercatorProjection import javax.inject.Inject import kotlin.streams.toList -@RequiresApi(Build.VERSION_CODES.N) class RealmOperateHelper() { @Inject lateinit var niMapController: NIMapController @@ -32,6 +31,7 @@ class RealmOperateHelper() { * @param bufferType 点位外扩距离的单位: 米-Meter,像素-PIXEL * @param sort 是否需要排序 * */ + @RequiresApi(Build.VERSION_CODES.N) suspend fun queryLink( point: Point, buffer: Double = DEFAULT_BUFFER, @@ -102,6 +102,7 @@ class RealmOperateHelper() { * @param bufferType 点位外扩距离的单位: 米-Meter,像素-PIXEL * @param sort 是否需要排序 * */ + @RequiresApi(Build.VERSION_CODES.N) suspend fun queryElement( point: Point, buffer: Double = DEFAULT_BUFFER, @@ -154,12 +155,13 @@ class RealmOperateHelper() { suspend fun queryLinkByLinkPid(linkPid: String): MutableList { val result = mutableListOf() withContext(Dispatchers.IO) { - val realmList = Realm.getDefaultInstance().where(RenderEntity::class.java) + val realm = Realm.getDefaultInstance() + val realmList = realm.where(RenderEntity::class.java) .notEqualTo("table", "OMDB_RD_LINK") .and() .equalTo("properties['${LinkTable.linkPid}']", linkPid) .findAll() - result.addAll(realmList) + result.addAll(realm.copyFromRealm(realmList)) } return result } 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 35271e25..a22f402c 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 @@ -1,16 +1,12 @@ package com.navinfo.omqs.ui.activity.map -import android.os.Build import android.os.Bundle import androidx.activity.viewModels -import androidx.annotation.RequiresApi import androidx.core.view.WindowCompat import androidx.databinding.DataBindingUtil import androidx.navigation.findNavController import androidx.recyclerview.widget.LinearLayoutManager -import com.blankj.utilcode.util.ToastUtils import com.navinfo.collect.library.map.NIMapController -import com.navinfo.collect.library.map.handler.NiLocationListener import com.navinfo.omqs.Constant import com.navinfo.omqs.R import com.navinfo.omqs.databinding.ActivityMainBinding @@ -35,7 +31,25 @@ class MainActivity : BaseActivity() { @Inject lateinit var offlineMapDownloadManager: OfflineMapDownloadManager - private val signAdapter by lazy { SignAdapter() } + private val rightController by lazy { + findNavController(R.id.main_activity_right_fragment) + } + + private val signAdapter by lazy { + SignAdapter { position, signBean -> +// val directions = +// EmptyFragmentDirections.emptyFragmentToEvaluationResultFragment( +// ) +// rightController.navigate(directions) + rightController.currentDestination?.let { + if(it.id == R.id.EvaluationResultFragment){ + val bundle = Bundle() + bundle.putParcelable("SignBean", signBean) + rightController.navigate(R.id.EvaluationResultFragment, bundle) + } + } + } + } override fun onCreate(savedInstanceState: Bundle?) { WindowCompat.setDecorFitsSystemWindows(window, false) @@ -113,8 +127,7 @@ class MainActivity : BaseActivity() { * 点击录音按钮 */ fun voiceOnclick() { - val naviController = findNavController(R.id.main_activity_right_fragment) - naviController.navigate(R.id.EvaluationResultFragment) + rightController.navigate(R.id.EvaluationResultFragment) } // override fun onBackPressed() { 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 f8ec8e3e..f0ae515f 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 @@ -5,27 +5,22 @@ import android.content.DialogInterface import android.os.Build import android.os.Bundle import android.util.Log -import androidx.annotation.RequiresApi import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.navigation.findNavController import com.navinfo.collect.library.data.dao.impl.TraceDataBase -import com.navinfo.collect.library.data.entity.NiLocation import com.navinfo.collect.library.data.entity.RenderEntity import com.navinfo.collect.library.map.NIMapController -import com.navinfo.collect.library.map.handler.NiLocationListener import com.navinfo.collect.library.map.handler.OnQsRecordItemClickListener import com.navinfo.collect.library.utils.GeometryTools import com.navinfo.collect.library.utils.GeometryToolsKt -import com.navinfo.omqs.Constant import com.navinfo.omqs.R +import com.navinfo.omqs.bean.SignBean import com.navinfo.omqs.db.RealmOperateHelper import com.navinfo.omqs.ui.dialog.CommonDialog import com.navinfo.omqs.ui.manager.TakePhotoManager import dagger.hilt.android.lifecycle.HiltViewModel -import dagger.hilt.android.qualifiers.ActivityContext -import dagger.hilt.android.qualifiers.ApplicationContext import io.realm.RealmSet import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -137,6 +132,9 @@ class MainViewModel @Inject constructor( iconId = R.drawable.icon_speed_limit, iconText = element.name, distance = distance.toInt(), + elementId = element.id, + linkId = linkId, + geometry = element.geometry ) ) } @@ -161,7 +159,7 @@ class MainViewModel @Inject constructor( override fun onCleared() { super.onCleared() - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { mapController.lineHandler.removeLine() } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/SignAdapter.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/SignAdapter.kt index e024ba5d..a49d2543 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/SignAdapter.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/SignAdapter.kt @@ -3,11 +3,13 @@ package com.navinfo.omqs.ui.activity.map import android.view.LayoutInflater import android.view.ViewGroup import com.navinfo.omqs.R +import com.navinfo.omqs.bean.SignBean import com.navinfo.omqs.databinding.AdapterSignBinding import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter import com.navinfo.omqs.ui.other.BaseViewHolder -class SignAdapter : BaseRecyclerViewAdapter() { +class SignAdapter(private var itemListener: ((Int, SignBean) -> Unit?)? = null) : + BaseRecyclerViewAdapter() { override fun getItemViewRes(position: Int): Int { return R.layout.adapter_sign } @@ -23,6 +25,8 @@ class SignAdapter : BaseRecyclerViewAdapter() { val item = data[position] bd.signMainIcon.background = holder.viewBinding.root.context.getDrawable(item.iconId) bd.signMainIcon.text = item.iconText - + bd.root.setOnClickListener { + itemListener?.invoke(position, item) + } } } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/SignBean.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/SignBean.kt deleted file mode 100644 index 9ee45b97..00000000 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/SignBean.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.navinfo.omqs.ui.activity.map - -data class SignBean( - //图标ID - val iconId: Int, - val distance: Int = 0, - val iconText: String = "" -) \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt index f99ceed1..af248bdc 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt @@ -8,6 +8,7 @@ import androidx.databinding.DataBindingUtil import androidx.navigation.NavOptions import androidx.navigation.findNavController import com.navinfo.omqs.R +import com.navinfo.omqs.bean.SignBean import com.navinfo.omqs.databinding.FragmentEvaluationResultBinding import com.navinfo.omqs.ui.fragment.BaseFragment import com.navinfo.omqs.ui.other.shareViewModels @@ -18,6 +19,7 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener { private lateinit var binding: FragmentEvaluationResultBinding private val viewModel by shareViewModels("QsRecode") + // private val args:EmptyFragmentArgs by navArgs() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { @@ -56,15 +58,21 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener { /** * 读取元数据 */ - if (arguments != null) { - val id = requireArguments().getString("QsId") - if (id != null) { - viewModel.initData(id) - } else { - viewModel.initNewData() +// val id = args.qsId + var id: String = "" + var signBean: SignBean? = null + arguments?.let { + id = it.getString("QsId", "") + try { + signBean = it.getParcelable("SignBean") + } catch (e: java.lang.Exception) { } + } + + if (id == null || id.isEmpty()) { + viewModel.initNewData(signBean) } else { - viewModel.initNewData() + viewModel.initData(id) } // //监听大分类数据变化 diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt index 053e3fe6..184e5b63 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt @@ -10,6 +10,7 @@ import com.navinfo.collect.library.data.entity.QsRecordBean import com.navinfo.collect.library.data.entity.RenderEntity.Companion.LinkTable import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.utils.GeometryTools +import com.navinfo.omqs.bean.SignBean import com.navinfo.omqs.db.RealmOperateHelper import com.navinfo.omqs.db.RoomAppDatabase import dagger.hilt.android.lifecycle.HiltViewModel @@ -73,7 +74,7 @@ class EvaluationResultViewModel @Inject constructor( super.onCleared() Log.e("jingo", "EvaluationResultViewModel 销毁了 ${hashCode()}") mapController.markerHandle.removeMarker(markerTitle) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { mapController.lineHandler.removeLine() } } @@ -82,23 +83,42 @@ class EvaluationResultViewModel @Inject constructor( /** * 查询数据库,获取问题分类 */ - fun initNewData() { + fun initNewData(bean: SignBean?) { viewModelScope.launch(Dispatchers.IO) { getClassTypeList() getProblemLinkList() } val geoPoint = mapController.locationLayerHandler.getCurrentGeoPoint() - geoPoint?.let { - liveDataQsRecordBean.value!!.geometry = GeometryTools.createGeometry(it).toText() - mapController.markerHandle.addMarker(geoPoint, markerTitle) - viewModelScope.launch { - captureLink(geoPoint.longitude, geoPoint.latitude) + if (bean == null) { + geoPoint?.let { + liveDataQsRecordBean.value!!.geometry = GeometryTools.createGeometry(it).toText() + mapController.markerHandle.addMarker(geoPoint, markerTitle) + viewModelScope.launch { + captureLink(geoPoint.longitude, geoPoint.latitude) + } } + } else { + liveDataQsRecordBean.value?.run { + elementId = bean.elementId + linkId = bean.linkId + if (linkId.isNotEmpty()) { + viewModelScope.launch { + val link = realmOperateHelper.queryLink(linkId) + link?.let { l -> + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + mapController.lineHandler.showLine(l.geometry) + } + } + } + } + } + val point = GeometryTools.createGeoPoint(bean.geometry) + mapController.markerHandle.addMarker(point, markerTitle) } } /** - * 捕捉到路 + * 捕捉道路 */ private suspend fun captureLink(longitude: Double, latitude: Double) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/LeftAdapter.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/LeftAdapter.kt index 0ff2468b..467f3058 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/LeftAdapter.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/LeftAdapter.kt @@ -1,7 +1,9 @@ package com.navinfo.omqs.ui.fragment.evaluationresult +import android.os.Build import android.view.LayoutInflater import android.view.ViewGroup +import androidx.annotation.RequiresApi import com.navinfo.omqs.R import com.navinfo.omqs.databinding.TextItemSelectBinding import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter @@ -21,6 +23,7 @@ class LeftAdapter(private var itemListener: ((Int, String) -> Unit?)? = null) : return BaseViewHolder(viewBinding) } + @RequiresApi(Build.VERSION_CODES.M) override fun onBindViewHolder(holder: BaseViewHolder, position: Int) { val bd = holder.viewBinding as TextItemSelectBinding val title = data[position] diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListFragment.kt index bb43281c..8c55ae6c 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListFragment.kt @@ -50,7 +50,7 @@ class QsRecordListFragment : BaseFragment(){ binding.qsRecyclerview.addItemDecoration(itemDecoration) viewModel.getList(requireContext()) // itemClick - adapter!!.setOnKotlinItemClickListener(object : QsRecordListAdapter.IKotlinItemClickListener { + adapter.setOnKotlinItemClickListener(object : QsRecordListAdapter.IKotlinItemClickListener { override fun onItemClickListener(position: Int) { viewModel.onItemClickListener(activity as MainActivity,position) findNavController().popBackStack() diff --git a/app/src/main/res/layout/fragment_evaluation_result.xml b/app/src/main/res/layout/fragment_evaluation_result.xml index bd0896f0..f8d7cd6c 100644 --- a/app/src/main/res/layout/fragment_evaluation_result.xml +++ b/app/src/main/res/layout/fragment_evaluation_result.xml @@ -82,7 +82,7 @@ android:layout_height="wrap_content" android:layout_marginTop="5dp" android:background="@drawable/fm_card_map_down_status_bg" - android:onClick="@{fragment.onClick}" + android:onClick="@{fragment::onClick}" android:text="@{viewModel.liveDataQsRecordBean.phenomenon}" /> + tools:layout="@layout/fragment_empty"> + + + + + + + + + + + + - + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 63d6efae..0a318d80 100644 --- a/build.gradle +++ b/build.gradle @@ -4,6 +4,7 @@ buildscript { dependencies { classpath "io.realm:realm-gradle-plugin:10.11.1" + classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.5.3" } } plugins { @@ -11,4 +12,5 @@ plugins { id 'com.android.library' version '7.3.1' apply false id 'org.jetbrains.kotlin.android' version '1.8.0' apply false id 'com.google.dagger.hilt.android' version '2.44' apply false + } diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt index d5d2145f..6079bfcd 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt @@ -26,7 +26,7 @@ import org.oscim.layers.vector.VectorLayer import org.oscim.layers.vector.geometries.Style import org.oscim.map.Map -@RequiresApi(Build.VERSION_CODES.N) +@RequiresApi(Build.VERSION_CODES.M) class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler(context, mapView), Map.UpdateListener {