回答編集履歴

2

Executorを渡すサンプルを追加

2018/06/15 05:19

投稿

kakajika
kakajika

スコア3131

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

ジェネリクス版の追加

2018/06/15 05:19

投稿

kakajika
kakajika

スコア3131

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
+ ```