Android 5 RecyclerView как Gmail

Я играл с RecyclerView и обнаружил, что не так много документов о том, как с ним играть.

Из документа я вижу, что приложение GMail использует RecyclerView, но в приложении есть множество функций, которые не поддерживает обычный RecyclerView:

Скриншот оттуда есть

https://developer.android.com/training/material/lists-cards.html

Функции:

  1. Подсветка элемента списка при касании
  2. Проведите влево/вправо, чтобы удалить

Могу ли я узнать, как реализовать эти функции?

Я обнаружил, что есть обсуждение того, как реализовать OnClickListener (хотя это решение довольно вялое, потому что оно постоянно проверяет область элемента списка)

RecyclerView onClick

Но если сравнить его с приложением Gmail, оно быстрое и плавное!

Могу ли я узнать, как я могу реализовать 2 функции выше? Как они это делают? они используют Recyclerview или ListView?

Я уверен, что мог бы реализовать эти функции с помощью ListView, но я понятия не имею, как реализовать их с помощью Recyclerview.


person Tim    schedule 09.01.2015    source источник


Ответы (1)


Проведите пальцем влево/вправо таким образом: Проведите пальцем с помощью ItemTouchHelper - ответ jmcdale

SwipeToDismiss доступен из коробки из библиотеки поддержки Android.

  1. Добавьте зависимость recyclerview-v7:22.2.+ в build.gradle:

    compile 'com.android.support:recyclerview-v7:22.2.+'

  2. Добавьте метод удаления в свою реализацию RecyclerView.Adapter:

    public class ExampleAdapter extends Adapter<ExampleItem> {
        [...]
        public void remove(int position) {
            list.remove(position);
            notifyItemRemoved(position);
        }
    
    }
    
  3. Используйте ItemTouchHelper и ItemTouchHelper.Callback:

    ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
    
        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
             //Remove swiped item
             adapter.remove(viewHolder.getAdapterPosition())
        }
    
        @Override
        public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
            //Available drag and drop directions
            int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
            //Available swipe directions
            int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
            return makeMovementFlags(dragFlags, swipeFlags);
        }
    
        //Disable or Enable drag and drop by long press
        @Override
        public boolean isLongPressDragEnabled() {
            //return false;
            return true;
        }
    
        //Disable or Enable swiping
        @Override
        public boolean isItemViewSwipeEnabled() {
            //return false;
            return true;
        }
    
    };
    
    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
    
  4. Прикрепите ItemTouchHelper к RecyclerView

    itemTouchHelper.attachToRecyclerView(recyclerView);
    

Еще одна полезная ссылка: перетаскивание с помощью recyclerView

person Владимир Широков    schedule 01.09.2015
comment
Обратите внимание, что ответы только по ссылкам не рекомендуются, ответы SO должны быть конечной точкой поиска. для решения (по сравнению с еще одной остановкой ссылок, которые со временем устаревают). Пожалуйста, рассмотрите возможность добавления здесь отдельного синопсиса, оставив ссылку в качестве справочной информации. - person kleopatra; 01.09.2015
comment
gmail longpress контекстный режим действия android пожалуйста, помогите, как создать и обработать gmail longpress и удалить - person Harsha; 15.10.2016