增加我的数据列表部分功能
This commit is contained in:
parent
e72cc87475
commit
c940c4b236
@ -74,8 +74,6 @@ class MainActivity : BaseActivity() {
|
|||||||
ToastUtils.showLong("定位${it.longitude}")
|
ToastUtils.showLong("定位${it.longitude}")
|
||||||
binding!!.viewModel!!.addSaveTrace(it)
|
binding!!.viewModel!!.addSaveTrace(it)
|
||||||
binding!!.viewModel!!.startSaveTraceThread(this)
|
binding!!.viewModel!!.startSaveTraceThread(this)
|
||||||
viewModel.addSaveTrace(it)
|
|
||||||
// binding.viewModel!!.startSaveTraceThread(this)
|
|
||||||
})
|
})
|
||||||
//显示轨迹图层
|
//显示轨迹图层
|
||||||
// mapController.layerManagerHandler.showNiLocationLayer(Constant.DATA_PATH+ SystemConstant.USER_ID+"/trace.sqlite")
|
// mapController.layerManagerHandler.showNiLocationLayer(Constant.DATA_PATH+ SystemConstant.USER_ID+"/trace.sqlite")
|
||||||
|
@ -129,6 +129,9 @@ class PersonalCenterFragment : BaseFragment(), FSAFActivityCallbacks {
|
|||||||
R.id.personal_center_menu_task_list -> {
|
R.id.personal_center_menu_task_list -> {
|
||||||
findNavController().navigate(R.id.TaskListFragment)
|
findNavController().navigate(R.id.TaskListFragment)
|
||||||
}
|
}
|
||||||
|
R.id.personal_center_menu_qs_record_list -> {
|
||||||
|
findNavController().navigate(R.id.QsRecordListFragment)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,60 @@
|
|||||||
|
package com.navinfo.omqs.ui.fragment.tasklist
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.util.Log
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.lifecycle.Observer
|
||||||
|
import com.navinfo.collect.library.data.entity.QsRecordBean
|
||||||
|
import com.navinfo.omqs.R
|
||||||
|
import com.navinfo.omqs.bean.TaskBean
|
||||||
|
import com.navinfo.omqs.databinding.AdapterQsRecordListBinding
|
||||||
|
import com.navinfo.omqs.databinding.AdapterTaskListBinding
|
||||||
|
import com.navinfo.omqs.http.taskdownload.TaskDownloadManager
|
||||||
|
import com.navinfo.omqs.tools.FileManager.Companion.FileDownloadStatus
|
||||||
|
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
|
||||||
|
import com.navinfo.omqs.ui.other.BaseViewHolder
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 离线地图城市列表 RecyclerView 适配器
|
||||||
|
*
|
||||||
|
* 在 RecycleView 的 ViewHolder 中监听 ViewModel 的 LiveData,然后此时传递的 lifecycleOwner 是对应的 Fragment。由于 ViewHolder 的生命周期是比 Fragment 短的,所以当 ViewHolder 销毁时,由于 Fragment 的 Lifecycle 还没有结束,此时 ViewHolder 会发生内存泄露(监听的 LiveData 没有解绑)
|
||||||
|
* 这种场景下有两种解决办法:
|
||||||
|
*使用 LiveData 的 observeForever 然后在 ViewHolder 销毁前手动调用 removeObserver
|
||||||
|
*使用 LifecycleRegistry 给 ViewHolder 分发生命周期(这里使用了这个)
|
||||||
|
*/
|
||||||
|
class QsRecordListAdapter(
|
||||||
|
private val context: Context
|
||||||
|
) : BaseRecyclerViewAdapter<QsRecordBean>() {
|
||||||
|
|
||||||
|
|
||||||
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
|
||||||
|
val viewBinding =
|
||||||
|
AdapterQsRecordListBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||||
|
return BaseViewHolder(viewBinding)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewRecycled(holder: BaseViewHolder) {
|
||||||
|
super.onViewRecycled(holder)
|
||||||
|
//页面滑动时会用holder重构页面,但是对进度条的监听回调会一直返回,扰乱UI,所以当当前holder去重构的时候,移除监听
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
|
||||||
|
val binding: AdapterQsRecordListBinding =
|
||||||
|
holder.viewBinding as AdapterQsRecordListBinding
|
||||||
|
val qsRecordBean = data[position]
|
||||||
|
//tag 方便onclick里拿到数据
|
||||||
|
holder.tag = qsRecordBean.id.toString()
|
||||||
|
changeViews(binding, qsRecordBean)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun changeViews(binding: AdapterQsRecordListBinding, qsRecordBean: QsRecordBean) {
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getItemViewRes(position: Int): Int {
|
||||||
|
return R.layout.adapter_offline_map_city
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,52 @@
|
|||||||
|
package com.navinfo.omqs.ui.fragment.qsrecordlist
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.fragment.app.viewModels
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
import com.navinfo.omqs.databinding.FragmentQsRecordListBinding
|
||||||
|
import com.navinfo.omqs.ui.fragment.BaseFragment
|
||||||
|
import com.navinfo.omqs.ui.fragment.tasklist.QsRecordListAdapter
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
|
class QsRecordListFragment : BaseFragment(){
|
||||||
|
private var _binding: FragmentQsRecordListBinding? = null
|
||||||
|
private val viewModel by viewModels<QsRecordListViewModel>()
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
private val adapter: QsRecordListAdapter by lazy {
|
||||||
|
QsRecordListAdapter(
|
||||||
|
requireContext()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View {
|
||||||
|
_binding = FragmentQsRecordListBinding.inflate(inflater, container, false)
|
||||||
|
return binding.root
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
val layoutManager = LinearLayoutManager(context)
|
||||||
|
//// 设置 RecyclerView 的固定大小,避免在滚动时重新计算视图大小和布局,提高性能
|
||||||
|
binding.qsRecyclerview.setHasFixedSize(true)
|
||||||
|
binding.qsRecyclerview.layoutManager = layoutManager
|
||||||
|
binding.qsRecyclerview.adapter = adapter
|
||||||
|
viewModel.liveDataQSList.observe(viewLifecycleOwner) {
|
||||||
|
adapter.refreshData(it)
|
||||||
|
}
|
||||||
|
viewModel.getList(requireContext())
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
super.onDestroyView()
|
||||||
|
_binding = null
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package com.navinfo.omqs.ui.fragment.qsrecordlist
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.util.Log
|
||||||
|
import androidx.lifecycle.MutableLiveData
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import com.navinfo.collect.library.data.entity.QsRecordBean
|
||||||
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
|
import io.realm.Realm
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@HiltViewModel
|
||||||
|
class QsRecordListViewModel @Inject constructor(
|
||||||
|
) : ViewModel() {
|
||||||
|
|
||||||
|
val liveDataQSList = MutableLiveData<List<QsRecordBean>>()
|
||||||
|
|
||||||
|
fun getList(context: Context) {
|
||||||
|
viewModelScope.launch(Dispatchers.IO) {
|
||||||
|
val realm = Realm.getDefaultInstance()
|
||||||
|
Log.e("jingo","realm hashCOde ${realm.hashCode()}")
|
||||||
|
val objects = realm.where(QsRecordBean::class.java).findAll()
|
||||||
|
liveDataQSList.postValue(realm.copyFromRealm(objects))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -10,7 +10,7 @@ import com.navinfo.omqs.R
|
|||||||
import com.navinfo.omqs.bean.TaskBean
|
import com.navinfo.omqs.bean.TaskBean
|
||||||
import com.navinfo.omqs.databinding.AdapterTaskListBinding
|
import com.navinfo.omqs.databinding.AdapterTaskListBinding
|
||||||
import com.navinfo.omqs.http.taskdownload.TaskDownloadManager
|
import com.navinfo.omqs.http.taskdownload.TaskDownloadManager
|
||||||
import com.navinfo.omqs.tools.FileManager.Companion.FileDownloadStatus
|
import com.navinfo.omqs.tools.FileManager
|
||||||
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
|
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
|
||||||
import com.navinfo.omqs.ui.other.BaseViewHolder
|
import com.navinfo.omqs.ui.other.BaseViewHolder
|
||||||
|
|
||||||
@ -31,11 +31,11 @@ class TaskListAdapter(
|
|||||||
if (it.tag != null) {
|
if (it.tag != null) {
|
||||||
val taskBean = data[it.tag as Int]
|
val taskBean = data[it.tag as Int]
|
||||||
when (taskBean.status) {
|
when (taskBean.status) {
|
||||||
FileDownloadStatus.NONE, FileDownloadStatus.UPDATE, FileDownloadStatus.PAUSE, FileDownloadStatus.ERROR -> {
|
FileManager.Companion.FileDownloadStatus.NONE, FileManager.Companion.FileDownloadStatus.UPDATE, FileManager.Companion.FileDownloadStatus.PAUSE, FileManager.Companion.FileDownloadStatus.ERROR -> {
|
||||||
Log.e("jingo", "开始下载 ${taskBean.status}")
|
Log.e("jingo", "开始下载 ${taskBean.status}")
|
||||||
downloadManager.start(taskBean.id)
|
downloadManager.start(taskBean.id)
|
||||||
}
|
}
|
||||||
FileDownloadStatus.LOADING, FileDownloadStatus.WAITING -> {
|
FileManager.Companion.FileDownloadStatus.LOADING, FileManager.Companion.FileDownloadStatus.WAITING -> {
|
||||||
Log.e("jingo", "暂停 ${taskBean.status}")
|
Log.e("jingo", "暂停 ${taskBean.status}")
|
||||||
downloadManager.pause(taskBean.id)
|
downloadManager.pause(taskBean.id)
|
||||||
}
|
}
|
||||||
@ -86,37 +86,37 @@ class TaskListAdapter(
|
|||||||
binding.taskProgress.progress =
|
binding.taskProgress.progress =
|
||||||
(cityBean.currentSize * 100 / cityBean.fileSize).toInt()
|
(cityBean.currentSize * 100 / cityBean.fileSize).toInt()
|
||||||
when (cityBean.status) {
|
when (cityBean.status) {
|
||||||
FileDownloadStatus.NONE -> {
|
FileManager.Companion.FileDownloadStatus.NONE -> {
|
||||||
if (binding.taskProgress.visibility == View.VISIBLE) binding.taskProgress.visibility =
|
if (binding.taskProgress.visibility == View.VISIBLE) binding.taskProgress.visibility =
|
||||||
View.INVISIBLE
|
View.INVISIBLE
|
||||||
binding.taskDownloadBtn.text = "下载"
|
binding.taskDownloadBtn.text = "下载"
|
||||||
}
|
}
|
||||||
FileDownloadStatus.WAITING -> {
|
FileManager.Companion.FileDownloadStatus.WAITING -> {
|
||||||
if (binding.taskProgress.visibility != View.VISIBLE) binding.taskProgress.visibility =
|
if (binding.taskProgress.visibility != View.VISIBLE) binding.taskProgress.visibility =
|
||||||
View.VISIBLE
|
View.VISIBLE
|
||||||
binding.taskDownloadBtn.text = "等待中"
|
binding.taskDownloadBtn.text = "等待中"
|
||||||
}
|
}
|
||||||
FileDownloadStatus.LOADING -> {
|
FileManager.Companion.FileDownloadStatus.LOADING -> {
|
||||||
if (binding.taskProgress.visibility != View.VISIBLE) binding.taskProgress.visibility =
|
if (binding.taskProgress.visibility != View.VISIBLE) binding.taskProgress.visibility =
|
||||||
View.VISIBLE
|
View.VISIBLE
|
||||||
binding.taskDownloadBtn.text = "暂停"
|
binding.taskDownloadBtn.text = "暂停"
|
||||||
}
|
}
|
||||||
FileDownloadStatus.PAUSE -> {
|
FileManager.Companion.FileDownloadStatus.PAUSE -> {
|
||||||
if (binding.taskProgress.visibility != View.VISIBLE) binding.taskProgress.visibility =
|
if (binding.taskProgress.visibility != View.VISIBLE) binding.taskProgress.visibility =
|
||||||
View.VISIBLE
|
View.VISIBLE
|
||||||
binding.taskDownloadBtn.text = "继续"
|
binding.taskDownloadBtn.text = "继续"
|
||||||
}
|
}
|
||||||
FileDownloadStatus.ERROR -> {
|
FileManager.Companion.FileDownloadStatus.ERROR -> {
|
||||||
if (binding.taskProgress.visibility != View.VISIBLE) binding.taskProgress.visibility =
|
if (binding.taskProgress.visibility != View.VISIBLE) binding.taskProgress.visibility =
|
||||||
View.VISIBLE
|
View.VISIBLE
|
||||||
binding.taskDownloadBtn.text = "重试"
|
binding.taskDownloadBtn.text = "重试"
|
||||||
}
|
}
|
||||||
FileDownloadStatus.DONE -> {
|
FileManager.Companion.FileDownloadStatus.DONE -> {
|
||||||
if (binding.taskProgress.visibility == View.VISIBLE) binding.taskProgress.visibility =
|
if (binding.taskProgress.visibility == View.VISIBLE) binding.taskProgress.visibility =
|
||||||
View.INVISIBLE
|
View.INVISIBLE
|
||||||
binding.taskDownloadBtn.text = "已完成"
|
binding.taskDownloadBtn.text = "已完成"
|
||||||
}
|
}
|
||||||
FileDownloadStatus.UPDATE -> {
|
FileManager.Companion.FileDownloadStatus.UPDATE -> {
|
||||||
if (binding.taskProgress.visibility == View.VISIBLE) binding.taskProgress.visibility =
|
if (binding.taskProgress.visibility == View.VISIBLE) binding.taskProgress.visibility =
|
||||||
View.INVISIBLE
|
View.INVISIBLE
|
||||||
binding.taskDownloadBtn.text = "更新"
|
binding.taskDownloadBtn.text = "更新"
|
||||||
|
22
app/src/main/res/layout/adapter_qs_record_list.xml
Normal file
22
app/src/main/res/layout/adapter_qs_record_list.xml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout 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="wrap_content"
|
||||||
|
android:background="@color/cv_bg_color"
|
||||||
|
android:paddingLeft="10dp"
|
||||||
|
android:paddingRight="10dp"
|
||||||
|
android:paddingTop="5dp"
|
||||||
|
tools:context="com.navinfo.omqs.ui.fragment.qsrecordlist.QsRecordListAdapter">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/qs_record_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="问题描述"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="@dimen/default_font_size" />
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
27
app/src/main/res/layout/fragment_qs_record_list.xml
Normal file
27
app/src/main/res/layout/fragment_qs_record_list.xml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?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="@color/white"
|
||||||
|
tools:context=".ui.fragment.qsrecordlist.QsRecordListFragment">
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/task_search"
|
||||||
|
style="@style/input_blue_type"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:hint="搜索"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/qs_recyclerview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/task_search"
|
||||||
|
app:layout_constraintVertical_bias="0.0"
|
||||||
|
tools:layout_editor_absoluteX="0dp" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -37,9 +37,9 @@
|
|||||||
android:icon="@drawable/baseline_person_24"
|
android:icon="@drawable/baseline_person_24"
|
||||||
android:title="任务列表" />
|
android:title="任务列表" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/personal_center_menu_offline_map3"
|
android:id="@+id/personal_center_menu_qs_record_list"
|
||||||
android:icon="@drawable/baseline_person_24"
|
android:icon="@drawable/baseline_person_24"
|
||||||
android:title="menu_home" />
|
android:title="我的数据" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/personal_center_menu_offline_map4"
|
android:id="@+id/personal_center_menu_offline_map4"
|
||||||
android:icon="@drawable/baseline_person_24"
|
android:icon="@drawable/baseline_person_24"
|
||||||
|
@ -29,4 +29,12 @@
|
|||||||
tools:layout="@layout/fragment_task_list">
|
tools:layout="@layout/fragment_task_list">
|
||||||
|
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/QsRecordListFragment"
|
||||||
|
android:name="com.navinfo.omqs.ui.fragment.qsrecordlist.QsRecordListFragment"
|
||||||
|
android:label="我的数据"
|
||||||
|
tools:layout="@layout/fragment_qs_record_list">
|
||||||
|
|
||||||
|
</fragment>
|
||||||
</navigation>
|
</navigation>
|
Loading…
x
Reference in New Issue
Block a user