Merge branch 'master' of https://gitlab.navinfo.com/qiji4215/OneMapQS
Conflicts: app/build.gradle app/src/main/java/com/navinfo/omqs/OMQSApplication.kt app/src/main/java/com/navinfo/omqs/ui/MainActivity.kt app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt app/src/main/res/layout/fragment_offline_map_state_list.xml app/src/main/res/layout/map_view.xml collect-library/build.gradle
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
package com.navinfo.omqs.ui.other
|
||||
|
||||
interface AdapterItemClickListener {
|
||||
fun onItemClick(position: Int)
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import android.view.View.OnClickListener
|
||||
import android.view.ViewGroup
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.navinfo.omqs.R
|
||||
|
||||
/**
|
||||
* RecyclerView 适配器基础类
|
||||
@@ -26,32 +27,38 @@ abstract class BaseRecyclerViewAdapter<T>(var data: List<T> = listOf()) :
|
||||
// )
|
||||
// }
|
||||
|
||||
abstract fun getItemViewRes(position: Int): Int
|
||||
|
||||
override fun getItemViewType(position: Int): Int {
|
||||
return getItemViewRes(position)
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return data.size
|
||||
}
|
||||
|
||||
fun refreshData(newData: List<T>) {
|
||||
this.data = newData
|
||||
this.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
|
||||
override fun onViewAttachedToWindow(holder: BaseViewHolder) {
|
||||
super.onViewAttachedToWindow(holder)
|
||||
holder.onStart()
|
||||
}
|
||||
|
||||
|
||||
override fun onViewDetachedFromWindow(holder: BaseViewHolder) {
|
||||
super.onViewDetachedFromWindow(holder)
|
||||
holder.apply {
|
||||
onStop()
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
|
||||
|
||||
// this.recyclerView = recyclerView
|
||||
// super.onAttachedToRecyclerView(recyclerView)
|
||||
// this.recyclerView = recyclerView
|
||||
// override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
|
||||
open fun refreshData(newData: List<T>) {
|
||||
this.data = newData
|
||||
this.notifyDataSetChanged()
|
||||
}
|
||||
// }
|
||||
//
|
||||
// override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) {
|
||||
|
||||
107
app/src/main/java/com/navinfo/omqs/ui/other/ShareViewModel.kt
Normal file
107
app/src/main/java/com/navinfo/omqs/ui/other/ShareViewModel.kt
Normal file
@@ -0,0 +1,107 @@
|
||||
package com.navinfo.omqs.ui.other
|
||||
|
||||
import androidx.annotation.MainThread
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.createViewModelLazy
|
||||
import androidx.lifecycle.*
|
||||
import androidx.lifecycle.viewmodel.CreationExtras
|
||||
|
||||
/**
|
||||
* 用来共享的viewModel
|
||||
*/
|
||||
val vMStores = HashMap<String, ViewModelStoreOwner>()
|
||||
|
||||
|
||||
@MainThread
|
||||
inline fun <reified VM : ViewModel> Fragment.shareViewModels(
|
||||
scopeName: String,
|
||||
noinline ownerProducer: () -> ViewModelStoreOwner = { this },
|
||||
noinline factoryProducer: (() -> ViewModelProvider.Factory)? = null
|
||||
): Lazy<VM> {
|
||||
val owner by lazy(LazyThreadSafetyMode.NONE) { ownerProducer() }
|
||||
|
||||
val store: ViewModelStoreOwner
|
||||
if (vMStores.keys.contains(scopeName)) {
|
||||
store = vMStores[scopeName]!!
|
||||
} else {
|
||||
vMStores[scopeName] = owner
|
||||
store = owner
|
||||
this.let { fragment ->
|
||||
fragment.lifecycle.addObserver(object : LifecycleEventObserver {
|
||||
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
|
||||
if (event == Lifecycle.Event.ON_DESTROY) {
|
||||
fragment.lifecycle.removeObserver(this)
|
||||
store.viewModelStore.clear()
|
||||
vMStores.remove(scopeName)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
// store.register(this)
|
||||
|
||||
return createViewModelLazy(
|
||||
VM::class,
|
||||
{ store.viewModelStore },
|
||||
{
|
||||
(store as? HasDefaultViewModelProviderFactory)?.defaultViewModelCreationExtras
|
||||
?: CreationExtras.Empty
|
||||
},
|
||||
factoryProducer ?: {
|
||||
(store as? HasDefaultViewModelProviderFactory)?.defaultViewModelProviderFactory
|
||||
?: defaultViewModelProviderFactory
|
||||
})
|
||||
}
|
||||
|
||||
//
|
||||
//@MainThread
|
||||
//inline fun <reified VM : ViewModel> LifecycleOwner.shareViewModels(
|
||||
// scopeName: String,
|
||||
// factory: ViewModelProvider.Factory? = null
|
||||
//): Lazy<VM> {
|
||||
// val store: VMStore
|
||||
// if (vMStores.keys.contains(scopeName)) {
|
||||
// store = vMStores[scopeName]!!
|
||||
// } else {
|
||||
// store = VMStore()
|
||||
// vMStores[scopeName] = store
|
||||
// }
|
||||
// store.register(this)
|
||||
// return ViewModelLazy(VM::class,
|
||||
// { store.viewModelStore },
|
||||
// { factory ?: MyViewModelFactory() })
|
||||
//}
|
||||
|
||||
|
||||
class MyViewModelFactory(
|
||||
) : ViewModelProvider.Factory {
|
||||
override fun <T : ViewModel> create(modelClass: Class<T>): T {
|
||||
return modelClass.getConstructor().newInstance()
|
||||
}
|
||||
}
|
||||
|
||||
class VMStore(val owner: ViewModelStoreOwner) {
|
||||
|
||||
// private val bindTargets = ArrayList<LifecycleOwner>()
|
||||
// fun register(host: LifecycleOwner) {
|
||||
// if (!bindTargets.contains(host)) {
|
||||
// bindTargets.add(host)
|
||||
// host.lifecycle.addObserver(object : LifecycleEventObserver {
|
||||
// override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
|
||||
// if (event == Lifecycle.Event.ON_DESTROY) {
|
||||
// host.lifecycle.removeObserver(this)
|
||||
// bindTargets.remove(host)
|
||||
// if (bindTargets.isEmpty()) {//如果当前商店没有关联对象,则释放资源
|
||||
// vMStores.entries.find { it.value == this@VMStore }?.also {
|
||||
// owner.viewModelStore.clear()
|
||||
// vMStores.remove(it.key)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
}
|
||||
Reference in New Issue
Block a user