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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
#1

Обработка свайпа в ListView - Программирование Android

09.01.2014, 10:28. Просмотров 2636. Ответов 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, по которому делается свайп. Посоветуйте, как быть.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2014, 10:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка свайпа в ListView (Программирование Android):

Данные из SQlite в ListView, обработка события ListView - Программирование Android
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. mList.setOnItemClickListener(new...

Направление свайпа (up, right, left, down) - Программирование Android
Нужно определить направление свайпа. Как я это делаю: Заранее напишу вопрос: Хороший ли этот способ, есть ли более эффективные способы?...

Обработка объектов в listview - Программирование Android
Такая проблема... Хочу создать 50 строк в listview, в каждой строке по textview и button. Вопрос в том, как потом обрабатывать эти объекты....

Обработка нажатия CheckBox в ListView - Программирование Android
Привет, Есть ListView на основе BaseAdapter. Каждый элемент содержит TextView и несколько чекбоксов. Как обработать нажатие на конкретный...

ListView. После добавления кнопки перестал быть доступен сам ListView - Программирование Android
Кастомизировал ListView с помощью нескольких TextView. Но после того, как добавил ImageButton сам список стал недоступен для клика, а...

Listview вывод данных и переход по нажатию на другой Listview SQLite - Программирование Android
Доброго извините за название темы, долго не мог сформировать название, В общем у меня беда с пытаюсь написать программу где первый экран...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
VEINHORN
543 / 92 / 22
Регистрация: 16.12.2011
Сообщений: 317
09.01.2014, 11:58 #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;
    }
});
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2014, 11:58
Привет! Вот еще темы с ответами:

ListView, ToggleButton, SQLite, CursorAdapter. Как найти idItem в ListView, где была нажата ToggleButton? - Программирование Android
Добрый день. Затрудняюсь понять один момент: У меня есть ListView, который заполнен Items. Каждый Item - это свой XML. Пока...

Копирование данных из 1 listView во 2 listView - Программирование Android
Нужно что бы при нажатии на один элемент в первом ListView он копировался во второй ListView причём многократно.Но я использую...

Использование ListView в ListView - Программирование Android
Всем привет. Можете показать как использовать ListView в ListView, с заполнением как внешнего ListView, так и внутреннего причем с...

Переход из Listview в Listview - Программирование Android
Как сделать, что бы когда нажимаешь в главном листвью на кнопку, открывалось новое нужное(т.е. то по которому тапнули) активити с другим...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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