Skip to content

Commit e644d19

Browse files
authored
Merge pull request #26 from manneohlund/rc-5.0.0
Rc 5.0.0-beta04
2 parents 8d6ed11 + 426a1ee commit e644d19

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+3078
-835
lines changed

Diff for: .idea/.gitignore

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: .idea/gradle.xml

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: .idea/modules.xml

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: MIGRATION.md

+113
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,119 @@ open class SimpleItemViewHolder(parentView: ViewGroup) : SmartViewHolder<Int>(
120120
}
121121
```
122122

123+
### Nested adapter
124+
125+
#### NEW v5.0.0 with smart-recycler-adapter-nestedadapter library
126+
127+
As of `smart-recycler-adapter:v5.0.0` static nested adapter mapping have been removed from `SmartRecyclerAdapter` and is added in this extension library `smart-recycler-adapter-nestedadapter`.
128+
Default binder in nestedadapter is `SmartNestedAdapterBinder` implements `SmartViewHolderBinder` for basic view holder mapping functionality.
129+
`SmartRecyclerAdapter` will hold the `SmartNestedAdapterBinder` references and call the default implemented interfaces `OnCreateViewHolderListener`, `OnBindViewHolderListener`, `OnViewRecycledListener` on ViewHolder lifecycle stages.
130+
`SmartViewHolder` subclasses must implement `SmartNestedRecyclerViewHolder` in order for `SmartNestedAdapterBinder` to get the target recyclerView.
131+
How does it work? 👇
132+
133+
### SmartViewHolder
134+
135+
Sample uses kotlin synthetic view property import!
136+
137+
```kotlin
138+
class NestedRecyclerViewHolder(parentView: ViewGroup) :
139+
SmartViewHolder<MovieCategory>(parentView, R.layout.nested_recycler_view),
140+
SmartNestedRecyclerViewHolder {
141+
142+
override val recyclerView: RecyclerView = itemView.nestedRecyclerView
143+
144+
init {
145+
itemView.nestedRecyclerView.apply {
146+
layoutManager = LinearLayoutManager(context, HORIZONTAL, false)
147+
isNestedScrollingEnabled = false
148+
setHasFixedSize(true)
149+
}
150+
}
151+
152+
override fun bind(item: MovieCategory) {
153+
itemView.title.text = item.title
154+
}
155+
}
156+
```
157+
158+
### SmartRecyclerAdapter
159+
160+
`SmartNestedAdapterBinder` will only target `NestedRecyclerViewHolder`.
161+
Supply a `SmartAdapterBuilder` or `SmartEndlessScrollAdapterBuilder` that will be build a new nested adapter for each `NestedRecyclerViewHolder`.
162+
163+
```kotlin
164+
SmartRecyclerAdapter
165+
.items(items)
166+
.add(
167+
SmartNestedAdapterBinder(
168+
viewHolderType = NestedRecyclerViewHolder::class,
169+
smartRecyclerAdapterBuilder = SmartRecyclerAdapter.empty()
170+
.map(MovieModel::class, ThumbViewHolder::class)
171+
.add(OnClickEventListener { event: ViewEvent.OnClick ->
172+
// Handle nested adapter item click event
173+
})
174+
)
175+
)
176+
.add(OnClickEventListener(NestedRecyclerViewHolder::class, R.id.more) {
177+
// Handle parent adapter click event
178+
})
179+
.into(recyclerView)
180+
```
181+
182+
#### OLD 4.X.X
183+
184+
##### Nested SmartRecyclerAdapter
185+
186+
New in `SmartRecyclerAdapter` v2.0.0 is support for statically resolved nested recycler adapter.
187+
Now you can easily build complex nested adapters without hustle and have full control of the adapter in your view controlling `Fragment` or `Activity`.
188+
Use the new `create()` method instead of the `into(recyclerView)` to create just the `SmartRecyclerAdapter` then set the adapter to the recycler view in your `ViewHolder`.
189+
Just implement the `SmartAdapterHolder` interface in your `ViewHolder` and `SmartRecyclerAdapter` will handle the mapping.
190+
191+
##### 1. Create your nested SmartRecyclerAdapter
192+
193+
```kotlin
194+
val myWatchListSmartMovieAdapter: SmartRecyclerAdapter = SmartRecyclerAdapter
195+
.items(myWatchListItems)
196+
.map(MovieModel::class, ThumbViewHolder::class)
197+
.addViewEventListener(onItemClickListener { view, viewEventId, position -> playMovie() })
198+
.create()
199+
````
200+
201+
##### 2. Map myWatchListSmartMovieAdapter with MyWatchListViewHolder
202+
203+
```kotlin
204+
SmartRecyclerAdapter
205+
.items(items)
206+
.map(MoviePosterModel::class, PosterViewHolder::class)
207+
.map(MyWatchListModel::class, MyWatchListViewHolder::class)
208+
.map(MyWatchListViewHolder::class, myWatchListSmartMovieAdapter)
209+
.into(recyclerView)
210+
```
211+
212+
##### 3. Map myWatchListSmartMovieAdapter to MyWatchListViewHolder
213+
214+
```kotlin
215+
class MyWatchListViewHolder :
216+
SmartViewHolder<MyWatchListModel>,
217+
SmartAdapterHolder {
218+
219+
override var smartRecyclerAdapter: SmartRecyclerAdapter? = null
220+
set(value) {
221+
field = value
222+
recyclerView.layoutManager = LinearLayoutManager(recyclerView.context, HORIZONTAL, false)
223+
recyclerView.adapter = value
224+
}
225+
226+
override fun bind(myWatchListModel: MyWatchListModel) {
227+
// bind model data to views
228+
}
229+
230+
override fun unbind() {
231+
// optional unbinding of view data model
232+
}
233+
}
234+
```
235+
123236
### Drag & Drop
124237

125238
#### NEW v5.0.0 with smart-recycler-adapter-viewevent library

0 commit comments

Comments
 (0)