回答編集履歴
2
Executorを渡すサンプルを追加
test
CHANGED
@@ -34,6 +34,8 @@
|
|
34
34
|
|
35
35
|
あとは、普通にPagedList.Builderの引数に渡してあげればOKです。
|
36
36
|
|
37
|
+
(追記: Executorが必要とのことだったので足しました)
|
38
|
+
|
37
39
|
|
38
40
|
|
39
41
|
```kotlin
|
@@ -42,9 +44,31 @@
|
|
42
44
|
|
43
45
|
val pagedList = PagedList.Builder(ListDataSource(list), ...)
|
44
46
|
|
47
|
+
.setNotifyExecutor(UiThreadExecutor())
|
48
|
+
|
49
|
+
.setFetchExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
|
50
|
+
|
45
51
|
...
|
46
52
|
|
47
53
|
.build()
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
// UiThreadExecutorの実装例
|
58
|
+
|
59
|
+
class UiThreadExecutor : Executor {
|
60
|
+
|
61
|
+
private val handler = Handler(Looper.getMainLooper())
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
override fun execute(command: Runnable) {
|
66
|
+
|
67
|
+
handler.post(command)
|
68
|
+
|
69
|
+
}
|
70
|
+
|
71
|
+
}
|
48
72
|
|
49
73
|
```
|
50
74
|
|
1
ジェネリクス版の追加
test
CHANGED
@@ -47,3 +47,33 @@
|
|
47
47
|
.build()
|
48
48
|
|
49
49
|
```
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
より汎用的なものにしたいならこんな感じで。
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
```kotlin
|
58
|
+
|
59
|
+
class ListDataSource<T>(private val items: List<T>) : PositionalDataSource<T>() {
|
60
|
+
|
61
|
+
override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback<T>) {
|
62
|
+
|
63
|
+
callback.onResult(items, 0, items.size)
|
64
|
+
|
65
|
+
}
|
66
|
+
|
67
|
+
override fun loadRange(params: LoadRangeParams, callback: LoadRangeCallback<T>) {
|
68
|
+
|
69
|
+
val start = params.startPosition
|
70
|
+
|
71
|
+
val end = params.startPosition + params.loadSize
|
72
|
+
|
73
|
+
callback.onResult(items.subList(start, end))
|
74
|
+
|
75
|
+
}
|
76
|
+
|
77
|
+
}
|
78
|
+
|
79
|
+
```
|