|
ListView + ViewHolder
|
|||
---|---|---|---|
#18+
Пробую реализовать вывод истории чата. Для этого в приложении использую ListView и ViewHolder. Пример нашел тут http://androiddocs.ru/pattern-viewholder-v-realizacii-spiska-listview/, да их на самом деле много и все похожи. Только вот у меня не получается корректно вывести историю сообщений. Путается источник и приемник сообщений. При в массиве с данными источник и приемник заданы верно. Итак, вот мой код адаптера. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66.
Видимо ViewHolder отрабатывает как-то неверно, или он вообще не подходит для этой задачи, прошу подскажите. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2018, 11:15 |
|
ListView + ViewHolder
|
|||
---|---|---|---|
#18+
nikompПутается источник и приемник сообщений потому что View в ListView переиспользуются. Создается какое-то количество и по мере скролла, одни и те же вьюхи заполняются актуальными данными. А теперь посмотри на свой код и подумай что происходит здесь Код: sql 1. 2. 3. 4. 5. 6. 7.
в зависимости от того, какие сообщения идут первыми ты создаешь определенное количество вьюх 2х типов (left, right) и все - далее они переиспользуются и новые вьюхи не создаются. Правильное решение - это либо иметь 2 официальных типа вьюх как например описано тут http://android.amberfog.com/?p=296 либо иметь универсальную вьюху с сообщением слева и справа и в зависимости от chatBubble.myMessage() прятать одно и показывать другое. Ну и текст в правильный TextView записывать ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2018, 11:26 |
|
ListView + ViewHolder
|
|||
---|---|---|---|
#18+
chpasha, спасибо за ответ! Решил сделать одно универсальное вью. Изменил код адаптера Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87.
сейчас отправитель и получатель верно распределяются, а порядок сообщений нарушается ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2018, 12:31 |
|
ListView + ViewHolder
|
|||
---|---|---|---|
#18+
видимость все равно не правильно делаешь. вот это вот Код: sql 1. 2. 3. 4. 5.
должно быть в том же месте, где текст сообщения устанавливается. еще раз осмысли: создается каких-то 5-6 вьюх и они используются всегда и на все случаи жизни. т.е. для каждого сообщения ВСЕ изменяемые значения (в том числе видимость) должны устанавливаться каждый раз, когда это требуется ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2018, 13:18 |
|
ListView + ViewHolder
|
|||
---|---|---|---|
#18+
т.е. когда вьюха переиспользуется, convertView != null, т.е. ты в блок if (convertView == null) просто не попадаешь ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2018, 13:19 |
|
|
start [/forum/topic.php?fid=13&msg=39644386&tid=1330887]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
168ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 265ms |
0 / 0 |