Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
6 / 6 / 4
Регистрация: 16.11.2013
Сообщений: 134

Странное поведение swipe-to-dismiss RecyclerView

15.02.2015, 22:24. Показов 2042. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
После удаления свайпом элемента списка остаётся небольшой пробе между элементами, сложно объяснить, поэтому вот ссылка на то, что происходит:
Когда элемент списка смахивается свайпом, появляется alertdialog, который предлагает подтвердить удаление. Если нажать Cancel, что-то странное происходит и элементы начинают удаляться так, как видно на анимации. Если не нажимать Cancel, всё работает отлично. Не пойму, в чем проблема.

Вот код:
MainActivity.java http://pastebin.com/AUdLCHjs
XML-файлы, собранные в один: http://pastebin.com/Cf95zv6f

Также, я использую дополнительные библиотеки:
SwipeableRecyclerView: https://github.com/krossovochk... tener.java
ListItemDivider: https://gist.github.com/polbin... 44207c0e92

В SwipeableRecyclerView я делал некоторые изменения примерно между 172 и 280 строками (в case MotionEvent.ACTION_UP), скорее всего там и происходит что-то непонятное.
Надеюсь, найдётся человек, который разбирается в том, почему такое может происходить

Добавлено через 9 минут
В частности, изменения в SwipeableRecyclerView состоят в изменении анимации влево-вправо, чтобы при вызове alertdialog и нажатия Cancel, элемент списка плавно возвращался на своё место

Добавлено через 15 минут
Есть подозрения, что проблема в файле, отобаржающем отдельный элемент RecyclerView custom_row.xml
XML
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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="horizontal"
   android:layout_width="match_parent"
   android:layout_height="51dp"
   android:layout_marginTop="3dp"
   android:layout_marginBottom="3dp">
 
 
    <TextView
       android:id="@+id/text_with_icon"
       android:layout_width="41dp"
       android:layout_height="41dp"
       android:layout_alignParentLeft="true"
       android:layout_alignParentStart="true"
       android:layout_alignParentTop="true"
       android:layout_gravity="center_vertical"
       android:layout_marginLeft="18dp"
       android:layout_marginStart="18dp"
       android:layout_marginRight="18dp"
       android:layout_marginTop="5dp"
       android:background="@drawable/circle"
       android:gravity="center"
       android:textAllCaps="true"
       android:text="a"
       android:textColor="#fff"
       android:textSize="22sp" />
 
    <LinearLayout
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerInParent="true"
       android:gravity="center_vertical"
       android:layout_toRightOf="@+id/text_with_icon"
       android:orientation="vertical" >
 
        <TextView
           android:id="@+id/list_title"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:paddingLeft="0dp"
           android:paddingTop="3dp"
           android:paddingBottom="3dp"
           android:text="Dummy text"
           android:textColor="#000"
           android:textSize="16sp"
           android:textStyle="bold" />
 
        <TextView
           android:id="@+id/description"
           android:layout_width="wrap_content"
           android:layout_height="14dp"
           android:text="Lorem ipsum dolor sit amet, consectetur..."
           android:textColor="#000"
           android:visibility="visible"
           android:textSize="12sp"
           android:textStyle="normal" />
    </LinearLayout>
</RelativeLayout>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.02.2015, 22:24
Ответы с готовыми решениями:

Странное поведение RecyclerView во фрагменте
Здравствуйте, возникла проблема с обновлением RecyclerView, точнее при создание адаптера в фрагменте, он создается после вызова метода...

Поведение RecyclerView при удалении элементов
Здравствуйте! Есть RecyclerView, который подгружается новыми данными, когда пользователь прокрутит весь список до конца. При удалении...

Странное поведение if
в коде Select if CHARACTER_LENGTH(s.lname)=6 then s.lname||' '||s.fname||' '||s.mname end from stud s выдаёт ошибку ...

7
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
16.02.2015, 16:14
Такое ощущение, что это остаются ваши Shape разделители. Если удалять начать с середины так, чтоб остались 1 и последний элементы также будет?

Добавлено через 5 минут
Походу так оно и есть, Вам нужно самим при успешном удалении элемента убирать его отрисовку из View.
0
6 / 6 / 4
Регистрация: 16.11.2013
Сообщений: 134
16.02.2015, 19:19  [ТС]
Nixy, так если я полностью удаляю разделители, то остаются пустые пробелы, просто с разделителями нагляднее
0
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
16.02.2015, 19:37
Нет, я имею ввиду, когда вы удаляете элемент из списка вам нужно отследить удаление вашей фигуры, Ваш View этого не делает по какой-то причине. И покажите все таки, что будет если удалять из серединки.
0
6 / 6 / 4
Регистрация: 16.11.2013
Сообщений: 134
16.02.2015, 21:26  [ТС]
Nixy, да, если начать удалять с любого места, включая середину, происходит то же самое.
вот тут я выделил места, где я пробовал вносить изменения (добавлять анимацию движения элемента обратно на место в случае dismiss или cancel): http://pastebin.com/NDACaGE8
Может быть так, что тут зарыта проблема?

Добавлено через 3 минуты
Цитата Сообщение от Nixy Посмотреть сообщение
Вам нужно самим при успешном удалении элемента убирать его отрисовку из View.
Не могли бы Вы по-подробнее объяснить, что нужно сделать? Я пробовал делать
Java
1
mRecyclerView.InvalidateItemDeccorations();
, да и другие Ivalidate() тоже пробовал, но к сожалению, это не дало результатов.
0
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
17.02.2015, 00:00
А дайте посмотреть класс, где вы добавляете свой разделитель
0
6 / 6 / 4
Регистрация: 16.11.2013
Сообщений: 134
17.02.2015, 00:32  [ТС]
Nixy, Вот такой код в главном активити:
Java
1
recyclerView.addItemDecoration(new SimpleDividerItemDecoration(getApplicationContext()));
А вот сам код класса разделителя:
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
public class SimpleDividerItemDecoration extends RecyclerView.ItemDecoration {
      private Drawable mDivider;
 
      public SimpleDividerItemDecoration(Context context) {
          mDivider = context.getResources().getDrawable(R.drawable.line_divider);
}
 
      @Override
      public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
          int left = parent.getPaddingLeft();
          int right = parent.getWidth() - parent.getPaddingRight();
 
          int childCount = parent.getChildCount();
          for (int i = 0; i < childCount; i++) {
               View child = parent.getChildAt(i);
 
               RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
 
               int top = child.getBottom() + params.bottomMargin;
               int bottom = top + mDivider.getIntrinsicHeight();
 
               mDivider.setBounds(left, top, right, bottom);
               mDivider.draw(c);
          }
      }
}
0
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
17.02.2015, 08:20
Нужно продебажить момент удаления и проверить идет ли вызов onDraw, идет ли вызов onDraw при вызове
Цитата Сообщение от yo_krevedko Посмотреть сообщение
Не могли бы Вы по-подробнее объяснить, что нужно сделать? Я пробовал делать

Java
1
mRecyclerView.InvalidateItemDeccorations();
, да и другие Ivalidate() тоже пробовал, но к сожалению, это не дало результатов.
Если ничего не поможет, то можно поставить костыль, это нарисовать разделитель на layout элемента списка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2015, 08:20
Помогаю со студенческими работами здесь

Странное поведение
Всем привет,я тут новенький и прошу у вас помощи. Проблема заключается в следующем: Были проблемы с куллером видеокарты и пришлось её...

Странное поведение
Здравствуйте, столкнулся с проблемой и никто не может сказать в чем может быть загвоздка, сам перепробовал все, что знал и что нашел в...

Странное поведение ПК
Конфиг собранного ПК: Мать ASRock z390 PG4 Проц i7-8700 ОЗУ HyperX Predator DDR4 3333MHz 4x8GB Видео Gtx 1060 6GB БП Corsair 850w...

Странное поведение
Здравствуйте еще раз :) Теперь возникла другая непонятка. Есть класс StringParser, объекты которого умеют разбивать строку на подстроки,...

Странное поведение
#include &lt;windows.h&gt; LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru