Skip to content

Commit f703448

Browse files
committed
released 2.6.2. Fixed handling clicks in PagingAdapter.
1 parent 794f87f commit f703448

File tree

4 files changed

+40
-26
lines changed

4 files changed

+40
-26
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ In this way every item of the recycler view has its own set of files, resulting
3737
## <a name="setup"></a>Setup
3838
In your gradle dependencies add:
3939
```groovy
40-
def recyclerAdapterVersion = "2.6.1" // change it with the version you want to use
40+
def recyclerAdapterVersion = "2.6.2" // change it with the version you want to use
4141
implementation "net.gotev:recycleradapter:$recyclerAdapterVersion"
4242
```
4343
This is the latest version: [ ![Download](https://api.bintray.com/packages/gotev/maven/recycler-adapter/images/download.svg) ](https://bintray.com/gotev/maven/recycler-adapter/_latestVersion)

manifest.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ ext {
99
library_licenses = ["Apache-2.0"]
1010
library_licenses_url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
1111
library_project_group = 'net.gotev'
12-
library_version = '2.6.1'
12+
library_version = '2.6.2'
1313
version_code = 5
1414
min_sdk = 18
1515
target_sdk = 28

recycleradapter-paging/src/main/java/net/gotev/recycleradapter/paging/PagingAdapter.kt

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,22 @@ import androidx.paging.PagedList
99
import androidx.paging.PagedListAdapter
1010
import androidx.recyclerview.widget.DiffUtil
1111
import androidx.recyclerview.widget.RecyclerView.NO_ID
12-
import net.gotev.recycleradapter.AdapterItem
13-
import net.gotev.recycleradapter.RecyclerAdapterViewHolder
14-
import net.gotev.recycleradapter.castAsIn
15-
import net.gotev.recycleradapter.viewType
12+
import net.gotev.recycleradapter.*
1613

1714
class PagingAdapter(
18-
dataSource: () -> DataSource<*, *>,
19-
config: PagedList.Config
20-
) : PagedListAdapter<AdapterItem<*>, RecyclerAdapterViewHolder>(diffCallback) {
15+
dataSource: () -> DataSource<*, *>,
16+
config: PagedList.Config
17+
) : PagedListAdapter<AdapterItem<*>, RecyclerAdapterViewHolder>(diffCallback), RecyclerAdapterNotifier {
18+
19+
companion object {
20+
val diffCallback = object : DiffUtil.ItemCallback<AdapterItem<*>>() {
21+
override fun areItemsTheSame(oldItem: AdapterItem<*>, newItem: AdapterItem<*>) =
22+
oldItem == newItem
23+
24+
override fun areContentsTheSame(oldItem: AdapterItem<*>, newItem: AdapterItem<*>) =
25+
!oldItem.hasToBeReplacedBy(oldItem)
26+
}
27+
}
2128

2229
private val dataSourceFactory: DataSourceFactory<Any> = DataSourceFactory(dataSource)
2330
private val data = LivePagedListBuilder<Any, AdapterItem<*>>(dataSourceFactory, config).build()
@@ -34,43 +41,50 @@ class PagingAdapter(
3441
}
3542

3643
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = currentList
37-
?.find { it.viewType() == viewType }
38-
?.createItemViewHolder(parent)
39-
?: throw IllegalStateException("Item not found")
44+
?.find { it.viewType() == viewType }
45+
?.createItemViewHolder(parent)
46+
?: throw IllegalStateException("Item not found")
4047

4148
override fun onBindViewHolder(holder: RecyclerAdapterViewHolder, position: Int) {
4249
bindItem(holder, position, true)
4350
}
4451

4552
override fun onBindViewHolder(
46-
holder: RecyclerAdapterViewHolder,
47-
position: Int,
48-
payloads: MutableList<Any>
53+
holder: RecyclerAdapterViewHolder,
54+
position: Int,
55+
payloads: MutableList<Any>
4956
) {
5057
bindItem(holder, position, payloads.isEmpty())
5158
}
5259

5360
override fun getItemViewType(position: Int) = getItem(position).viewType()
5461

5562
override fun getItemId(position: Int) =
56-
getItem(position)?.diffingId()?.hashCode()?.toLong() ?: NO_ID
63+
getItem(position)?.diffingId()?.hashCode()?.toLong() ?: NO_ID
5764

5865
fun reload() {
5966
data.value?.dataSource?.invalidate()
6067
}
6168

6269
private fun bindItem(holder: RecyclerAdapterViewHolder, position: Int, firstTime: Boolean) {
63-
getItem(position)?.castAsIn()?.bind(firstTime, holder)
64-
?: throw IllegalStateException("Item not found")
70+
getItem(position)?.let {
71+
holder.setAdapter(this)
72+
it.castAsIn().bind(firstTime, holder)
73+
} ?: throw IllegalStateException("Item not found")
6574
}
6675

67-
companion object {
68-
val diffCallback = object : DiffUtil.ItemCallback<AdapterItem<*>>() {
69-
override fun areItemsTheSame(oldItem: AdapterItem<*>, newItem: AdapterItem<*>) =
70-
oldItem == newItem
76+
override fun getAdapterItem(holder: RecyclerAdapterViewHolder): AdapterItem<*>? {
77+
val list = currentList ?: return null
78+
val position = holder.adapterPosition.takeIf { it >= 0 && it < list.size } ?: return null
7179

72-
override fun areContentsTheSame(oldItem: AdapterItem<*>, newItem: AdapterItem<*>) =
73-
!oldItem.hasToBeReplacedBy(oldItem)
74-
}
80+
return list[position]
81+
}
82+
83+
override fun selected(holder: RecyclerAdapterViewHolder) {
84+
//TODO: not implemented yet
85+
}
86+
87+
override fun notifyItemChanged(holder: RecyclerAdapterViewHolder) {
88+
//TODO: not implemented yet
7589
}
7690
}

recycleradapter/src/main/java/net/gotev/recycleradapter/RecyclerAdapterViewHolder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ abstract class RecyclerAdapterViewHolder(itemView: View) : RecyclerView.ViewHold
1212

1313
private var adapter: WeakReference<RecyclerAdapterNotifier>? = null
1414

15-
internal fun setAdapter(recyclerAdapter: RecyclerAdapterNotifier) {
15+
fun setAdapter(recyclerAdapter: RecyclerAdapterNotifier) {
1616
adapter = WeakReference(recyclerAdapter)
1717
}
1818

0 commit comments

Comments
 (0)