Форум программистов, компьютерный форум CyberForum.ru

Обработка свайпа в ListView - Android

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
09.01.2014, 10:28     Обработка свайпа в ListView #1
Добрый день,
Мне нужно сделать удаление элементов из 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
67
68
lv.setOnTouchListener(new View.OnTouchListener() {
            float x1 = Float.NaN, y1 = Float.NaN, x2=Float.NaN, y2=Float.NaN;
            static final int delta=40;
            //int ItemPosition;
 
            @Override
            public boolean onTouch(View view, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.EDGE_LEFT:
                        BottomSwipeDetected=true;
                        break;
 
                    case MotionEvent.ACTION_DOWN:
                        x1=event.getX();
                        y1=event.getY();
                        return false;
 
 
                    case MotionEvent.ACTION_UP:
                        x2=event.getX();
                        y2=event.getY();
                        itemPosition=lv.pointToPosition((int) x2, (int) y2);
                        LeftSwipeDetected=false;
                        RightSwipeDetected=false;
                        if (x2-x1>delta){
                            RightSwipeDetected=true;
 
                         //   return false;
                        }
                        else if (x1-x2>delta){
                            LeftSwipeDetected=true;
 
                         //   return false;
                        }
 
                    default:
                        return false;
                }
                return false;
            }
 
        });
 
@Override
    protected void onListItemClick(ListView lv, View v, int position, long id){
 
        if (LeftSwipeDetected){
            //Toast.makeText(this,"Left Swipe Detected", Toast.LENGTH_LONG).show();
            Animation animation= AnimationUtils.loadAnimation(this, R.anim.left_swipe_anim);
            animation.setAnimationListener(new SwipeAnimationListener(position));
            v.startAnimation(animation);
            LeftSwipeDetected=false;
        }
        else if (RightSwipeDetected){
            Intent intent=new Intent(this, Edit.class);
            startActivityForResult(intent, ADD_CODE);
            overridePendingTransition(R.anim.swipe_new_activity,R.anim.alfa_old_activity);
        }
 
        else {
            itemPosition=position;
            String txt=list.get(itemPosition).Text;
            Intent intent=new Intent(this, Edit.class);
            intent.putExtra("text",txt);
            startActivityForResult(intent, EDIT_CODE);
        }
 
    }
В принципе, оно работает. Но как то туго. Через раз или через два. То есть если просто слегка мазнуть пальцем по экрану (как в клиенте гуглопочты например) - то onListItemClick не срабатывает. Надо нормально так нажать пальцем на элемент списка и провести - тогда сработает. onTouchListener работает без проблем. Хотел было в нем сделать вызов анимации и удаление айтема - но не знаю, как в нем получить ссылку на конкретный View, по которому делается свайп. Посоветуйте, как быть.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2014, 10:28     Обработка свайпа в ListView
Посмотрите здесь:

ListView, ToggleButton, SQLite, CursorAdapter. Как найти idItem в ListView, где была нажата ToggleButton? Android
Android Listview
Переход из Listview в Listview Android
Android ListView. После добавления кнопки перестал быть доступен сам ListView
ListView Android
Android id ListView
Android из БД в ListView
Копирование данных из 1 listView во 2 listView Android
Android Обработка нажатия CheckBox в ListView
Android Обработка объектов в listview
Android Listview в listview
Данные из SQlite в ListView, обработка события ListView Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VEINHORN
542 / 91 / 22
Регистрация: 16.12.2011
Сообщений: 317
09.01.2014, 11:58     Обработка свайпа в ListView #2
Severomor1, мне кажется проще использовать библиотеку для этого.

Добавлено через 1 минуту
Или же так:

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
float historicX = Float.NaN, historicY = Float.NaN;
static final int DELTA = 50;
enum Direction {LEFT, RIGHT;}
...
ListView lvSimple = (ListView) findViewById(R.id.linLayout);
...
lvSimple.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) 
    {
        // TODO Auto-generated method stub
        switch (event.getAction()) 
        {
            case MotionEvent.ACTION_DOWN:
            historicX = event.getX();
            historicY = event.getY();
            break;
 
            case MotionEvent.ACTION_UP:
            if (event.getX() - historicX < -DELTA) 
            {
                FunctionDeleteRowWhenSlidingLeft();
                return true;
            }
            else if (event.getX() - historicX > DELTA)  
            {
                FunctionDeleteRowWhenSlidingRight();
                return true;
            } break;
            default: return false;
        }
        return false;
    }
});
Yandex
Объявления
09.01.2014, 11:58     Обработка свайпа в ListView
Ответ Создать тему
Опции темы

Текущее время: 04:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru