Step 1. Add the JitPack repository to your build file
Add it in your root settings.gradle at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
Add it in your settings.gradle.kts at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}
Add to pom.xml
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Add it in your build.sbt at the end of resolvers:
resolvers += "jitpack" at "https://jitpack.io"
Add it in your project.clj at the end of repositories:
:repositories [["jitpack" "https://jitpack.io"]]
Step 2. Add the dependency
dependencies {
implementation 'com.github.adgvcxz:viewmodel:0.7.4'
}
dependencies {
implementation("com.github.adgvcxz:viewmodel:0.7.4")
}
<dependency>
<groupId>com.github.adgvcxz</groupId>
<artifactId>viewmodel</artifactId>
<version>0.7.4</version>
</dependency>
libraryDependencies += "com.github.adgvcxz" % "viewmodel" % "0.7.4"
:dependencies [[com.github.adgvcxz/viewmodel "0.7.4"]]
viewModel.bindEvent {
add({ start.clicks() }, { TimerViewModel.Event.StartButtonClicked })
add({ stop.clicks() }, { TimerViewModel.Event.StopButtonClicked })
}
viewModel.bindModel {
add({ status }, { time.text = "Timer" }) { filter { it == TimerViewModel.TimerStatus.Completed } }
add({ time }, { time.text = toString() }) { filter { viewModel.currentModel().status == TimerViewModel.TimerStatus.Timing } }
}
val viewModel = SimpleRecyclerViewModel()
// 多类型
// 配置每个ViewModel对应的View
val adapter = RecyclerAdapter(viewModel) {
when (it) {
is TextItemViewModel -> TextItemView()
else -> LoadingItemView()
}
}
recyclerView.layoutManager = LinearLayoutManager(this)
recyclerView.adapter = adapter
...
class TextItemView : IDefaultView<TextItemViewModel> {
override fun bind(viewHolder: ItemViewHolder, viewModel: TextItemViewModel, position: Int) {
//绑定View与Model
...
}
}
//刷新数据
viewmodel.action.onNext(SetData(arrayListOf()))
//在尾部插入数据
viewodel.action.onNext(AppendData(arrayListOf()))
等等...
也可以自定义想要的操作,仅仅发送一次事件,无需notifyDataSetChanged()
或者notifyItemRangeInserted()
等操作
内部已经实现自动Refresh
或者LoadMore
等操作,只需要
1. 绑定SwipeRefreshLayout
viewModel.toEventBind(disposables) {
add({ refreshes() }, refreshLayout, { Refresh })
}
override fun request(refresh: Boolean): Observable<IMutation> {
//refresh:
//true: 下拉刷新数据
//false: 列表在底部加载更多数据
...
}
adapter.itemClicks().subscribe()
adapter.itemClicks().subscribe()
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.adgvcxz.viewModel:viewmodel:0.7.4'
implementation 'com.github.adgvcxz.viewModel:recyclerviewmodel:0.7.4'
implementation 'com.github.adgvcxz.viewModel:viewpagermodel:0.7.4'
}