回答編集履歴
3
後半が意味不明だったので書き直した
answer
CHANGED
@@ -46,14 +46,14 @@
|
|
46
46
|
```
|
47
47
|
|
48
48
|
出力中にある数字はWidget(Row)のuid(固有のID)です。
|
49
|
-
一つ分か
|
49
|
+
一つ分かったのは新しいRowが追加されるたびに、それまでにあったRowの順番が反転してることです。例えば#Aでは 395,377 の順なのが #Bでは新しく追加された413の後に 377,395 の順に(つまり逆順に)並んでいます。#Bから#Cにかけても同じです。
|
50
50
|
二つ目は各Rowに割り当てられているvalueが固定されてないことで、#Bでは377に'AB'が割り当てられているのに#Cでは'ABC'が割り当てられています。
|
51
51
|
|
52
|
-
|
52
|
+
内部でのRowの順番の変化とRowに割り当てるvalueの変化がToggleButtonのOn-Offが切り替わった様に見える原因だと思います。
|
53
53
|
|
54
54
|
> 更に表を何回かスクロールしたところ、押下したボタンの状態が勝手に変化していることを確認しました。
|
55
55
|
|
56
56
|
これも出力をみるとスクロール中に激しくadd_widget()とremove_widget()が呼び出されてました。
|
57
|
-
ここからは個人的な予想で検証はしていないんですが、
|
57
|
+
ここからは個人的な予想で検証はしていないんですが、RecycleViewは巨大な量のデータを扱えることをうりにしているので、その為の処理負荷対策なんじゃないかと思います。例えばスクロールによって'X'というvalueを表示する必要が無くなり、代わりに'Y'というvalueを表示する必要が生じた時、RecycleViewは’X'の表示に使っていたRowを’Y'の表示に使い回してRowのインスタンスの数を節約しているんじゃないかと。
|
58
58
|
|
59
|
-
|
59
|
+
スクロールの部分はともかくinsertによってvalueの割り当て直しが起きているのは事実なので、valueとそれに対応するRowは固定されない前提で扱わないといけないと言えると思います。
|
2
誤字の修正
answer
CHANGED
@@ -47,9 +47,9 @@
|
|
47
47
|
|
48
48
|
出力中にある数字はWidget(Row)のuid(固有のID)です。
|
49
49
|
一つ分かるのは新しいRowが追加されるたびに、それまでにあったRowの順番が反転してることです。具体的には#Aでは 395,377 の順なのが #Bでは新しく追加された413の後に377,395の順に(つまり逆順に)並んでいます。#Bから#Cにかけても同じです。
|
50
|
-
二つ目は各Rowに割り当てられているvalueが固定されてないことで、#
|
50
|
+
二つ目は各Rowに割り当てられているvalueが固定されてないことで、#Bでは377に'AB'が割り当てられているのに#Cでは'ABC'が割り当てられています。
|
51
51
|
|
52
|
-
つまり内部で順番
|
52
|
+
つまり内部ではRowの順番は変わっているし、Rowに割り当てるvalueも変わっているのでToggleButtonは使えないかと。
|
53
53
|
|
54
54
|
> 更に表を何回かスクロールしたところ、押下したボタンの状態が勝手に変化していることを確認しました。
|
55
55
|
|
1
文法の修正
answer
CHANGED
@@ -54,6 +54,6 @@
|
|
54
54
|
> 更に表を何回かスクロールしたところ、押下したボタンの状態が勝手に変化していることを確認しました。
|
55
55
|
|
56
56
|
これも出力をみるとスクロール中に激しくadd_widget()とremove_widget()が呼び出されてました。
|
57
|
-
ここからは個人的な予想ですが、recycleviewは巨大な量のデータを扱えることをうりにしているので、その為の処理負荷対策なんじゃないかと思います。recycleviewは実際にはitemの数だけRowを持ってはおらず、スクロールによって表示する必要があった時にそこでRowにvalueを割り当てて表示させているということです。
|
57
|
+
ここからは個人的な予想で検証はしていないんですが、recycleviewは巨大な量のデータを扱えることをうりにしているので、その為の処理負荷対策なんじゃないかと思います。recycleviewは実際にはitemの数だけRowを持ってはおらず、スクロールによって表示する必要があった時にそこでRowにvalueを割り当てて表示させているということです。
|
58
58
|
|
59
|
-
|
59
|
+
なのでvalueとそれに対応するRowが一対一で存在している事を期待するのはまずい気がします。上に書いたようにRowに割り当てられるvalueが常に変化しているばかりか、そのvalueを表示する必要が無い時はそもそも対応するRowが存在しないかもしれないので。
|