teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

後半が意味不明だったので書き直した

2017/11/18 03:39

投稿

gottadiveintopy
gottadiveintopy

スコア736

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

2

誤字の修正

2017/11/18 03:39

投稿

gottadiveintopy
gottadiveintopy

スコア736

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が固定されてないことで、#Aでは377に'A'が割り当てられているのに#Bでは'AB'が割り当てられています。
50
+ 二つ目は各Rowに割り当てられているvalueが固定されてないことで、#Bでは377に'AB'が割り当てられているのに#Cでは'ABC'が割り当てられています。
51
51
 
52
- つまり内部で順番変わっているRowに対、割り当てるvalueも変えることで見かけ上のvalueの並びが変らないようにしているっていうことだと思います。それが今回ToggleButton使ったことで内部のRowの並びの変化がそのまま見てしまったのだと。
52
+ つまり内部ではRowの順番変わっているし、Rowに割り当てるvalueも変わっているのでToggleButton使えないかと。
53
53
 
54
54
  > 更に表を何回かスクロールしたところ、押下したボタンの状態が勝手に変化していることを確認しました。
55
55
 

1

文法の修正

2017/11/15 13:42

投稿

gottadiveintopy
gottadiveintopy

スコア736

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
- まとめるとvalueとそれに対応するRowが一対一で存在している事を期待するのはまずそうです。上に書いたようにRowに割り当てられるvalueが常に変化しているばかりか、そのvalueを表示する必要が無い時はそもそも対応するRowが存在しないかもしれないので。
59
+ なのでvalueとそれに対応するRowが一対一で存在している事を期待するのはまずい気がします。上に書いたようにRowに割り当てられるvalueが常に変化しているばかりか、そのvalueを表示する必要が無い時はそもそも対応するRowが存在しないかもしれないので。