
рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ RecyclerView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдФрд░ рд╕реНрд╡рд╛рдЗрдк-рдЯреВ-рдЖрдЙрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ ред рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрднреА рднреА рдЪрд┐рддреНрд░рд┐рдд View.OnDragListener рдФрд░ SwipeToDismiss рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЕрд▓реНрдмрд╛рдирд┐рдХ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирдП рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдмрд╣реБрдд рдХрдо рд╣реА рдирд╡реАрдирддрдо APIs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдХреНрд╕рд░ GestureDetectors
рдФрд░ onInterceptTouchEvent
рдпрд╛ рдЕрдиреНрдп рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ RecyclerView
рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рд╕рдкреЛрд░реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рднреА рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
ItemTouchHelper
ItemTouchHelper рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ RecyclerView
рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рд╛рдЗрдк- рдЖрдЙрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧрд┐рддрд╛ RecyclerView.ItemDecoration рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ LayoutManager
рдФрд░ рдПрдбреЗрдкреНрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рддрддреНрд╡ рдПрдиреАрдореЗрд╢рди рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реВрдЪреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рджреВрд╕рд░реА рдЬрдЧрд╣ рдЦреАрдВрдЪрдиреЗ рдФрд░ рдЫреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ ItemTouchHelper
рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди ItemTouchHelper
ред рдмрд╛рдж рдореЗрдВ, рд▓реЗрдЦреЛрдВ рдХреА рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рджрд╛рдпрд░реЗ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдиреЛрдЯред рдЕрднреА рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? Github рджреЗрдЦреЗрдВ: Android-ItemTouchHelper-Demo ред рдкрд╣рд▓реА рдкреНрд░рддрд┐рдмрджреНрдз рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдбреЗрдореЛ .apk
рдлрд╝рд╛рдЗрд▓ рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ ред

рд╕рдорд╛рдпреЛрдЬрди
рдкрд╣рд▓реЗ рд╣рдореЗрдВ RecyclerView
рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЕрдкрдиреА build.gradle
. build.gradle
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ RecyclerView
рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВред
compile 'com.android.support:recyclerview-v7:22.2.0'
ItemTouchHelper
рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА RecyclerView.Adapter
рдФрд░ LayoutManager
рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЗрдЦ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
ItemTouchHelper рдФрд░ ItemTouchHelper.Callback рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
ItemTouchHelper
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ ItemTouchHelper.Callback рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ ред рдпрд╣ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЖрдВрджреЛрд▓рди рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ( engред рдореВрд╡) рдФрд░ рд╕реНрд╡рд╛рдЗрдк ( engред рд╕реНрд╡рд╛рдЗрдк)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рдЖрдк рдЪрдпрдирд┐рдд view
рдШрдЯрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдиреАрдореЗрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ SimpleCallback ред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рдо рд╕рдм рдХреБрдЫ рдЕрдкрдиреЗ рджрдо рдкрд░ рдХрд░реЗрдВрдЧреЗред
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдФрд░ рд╕реНрд╡рд╛рдЗрдк-рдЯреВ-рдЖрдЙрдЯ рдХреА рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
getMovementFlags(RecyclerView, ViewHolder) onMove(RecyclerView, ViewHolder, ViewHolder) onSwiped(ViewHolder, int)
рд╣рдо рдХрдИ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
isLongPressDragEnabled() isItemViewSwipeEnabled()
рдЖрдЗрдП рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
@Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; return makeMovementFlags(dragFlags, swipeFlags); }
ItemTouchHelper
рдХрд┐рд╕реА рдИрд╡реЗрдВрдЯ рдХреА рджрд┐рд╢рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП getMovementFlags()
рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рди рджрд┐рд╢рд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдФрд░ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд╛рдкрд╕реА рдзреНрд╡рдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ItemTouchHelper.makeMovementFlags(int, int)
ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реЙрдк рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
@Override public boolean isLongPressDragEnabled() { return true; }
ItemTouchHelper
рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕реНрд╡рд╛рдЗрдк рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ (рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд) рдХреЗ рд▓рд┐рдП рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реЙрдк рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд┐рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред isLongPressDragEnabled()
рд╡рд┐рдзрд┐ рдХреЛ isLongPressDragEnabled()
рддрддреНрд╡ рдкрд░ рд▓рдВрдмреЗ рдХреНрд▓рд┐рдХ рдХреЗ рдмрд╛рдж рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реЙрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП true
рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЦреАрдВрдЪрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ItemTouchHelper.startDrag(RecyclerView.ViewHolder)
рд╡рд┐рдзрд┐ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдмрд╛рдж рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
@Override public boolean isItemViewSwipeEnabled() { return true; }
view
рдШрдЯрдХ рдХреЗ рднреАрддрд░ рдХрд╣реАрдВ рднреА рд╕реНрдкрд░реНрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж isItemViewSwipeEnabled()
рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ isItemViewSwipeEnabled()
рд╡рд┐рдзрд┐ рд╕реЗ true
рд▓реМрдЯреЗрдВред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реНрд╡рд╛рдЗрдк рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ItemTouchHelper.startSwipe(RecyclerView.ViewHolder)
рд╡рд┐рдзрд┐ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ, onMove()
рдФрд░ onSwiped()
, рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╣рдо рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХреЙрд▓ рдЪреЗрди рдХреЗ рд╕рд╛рде рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
ItemTouchHelperAdapter.java
public interface ItemTouchHelperAdapter { void onItemMove(int fromPosition, int toPosition); void onItemDismiss(int position); }
рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ RecyclerListAdapter рдХреЛ рд╢реНрд░реЛрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред
public class RecyclerListAdapter extends RecyclerView.Adapter<ItemViewHolder> implements ItemTouchHelperAdapter {
notifyItemRemoved()
рдФрд░ notifyItemMoved()
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рддрд╛рдХрд┐ рдПрдбреЗрдкреНрдЯрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд░рд╣реЗред рдпрд╣ рднреА рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рддрддреНрд╡ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╣рд░ рдмрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВ рдЬрдм view
рдШрдЯрдХ рдХреЛ рдПрдХ рдирдП рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдЖрдВрджреЛрд▓рди рдХреЗ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ ("рдбреНрд░реЙрдк" рдШрдЯрдирд╛) ред
рдЕрдм рд╣рдо SimpleItemTouchHelperCallback
рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЕрднреА рднреА onMove()
рдФрд░ onSwiped()
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдбреЙрдкреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВ:
private final ItemTouchHelperAdapter mAdapter; public SimpleItemTouchHelperCallback( ItemTouchHelperAdapter adapter) { mAdapter = adapter; }
рдлрд┐рд░ рд╢реЗрд╖ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдбреЙрдкреНрдЯрд░ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ:
@Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { mAdapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); return true; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { mAdapter.onItemDismiss(viewHolder.getAdapterPosition()); }
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, Callback
рд╡рд░реНрдЧ рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
public class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback { private final ItemTouchHelperAdapter mAdapter; public SimpleItemTouchHelperCallback(ItemTouchHelperAdapter adapter) { mAdapter = adapter; } @Override public boolean isLongPressDragEnabled() { return true; } @Override public boolean isItemViewSwipeEnabled() { return true; } @Override public int getMovementFlags(RecyclerView recyclerView, ViewHolder viewHolder) { int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; return makeMovementFlags(dragFlags, swipeFlags); } @Override public boolean onMove(RecyclerView recyclerView, ViewHolder viewHolder, ViewHolder target) { mAdapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); return true; } @Override public void onSwiped(ViewHolder viewHolder, int direction) { mAdapter.onItemDismiss(viewHolder.getAdapterPosition()); } }
рдЬрдм рдХреЙрд▓рдмреИрдХ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ ItemTouchHelper
рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ attachToRecyclerView(RecyclerView)
рдХреЛ attachToRecyclerView(RecyclerView)
рд╡рд┐рдзрд┐ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MainFragment.java рдореЗрдВ ):
ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(adapter); ItemTouchHelper touchHelper = new ItemTouchHelper(callback); touchHelper.attachToRecyclerView(recyclerView);
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреИрд╕рд╛ рдХреБрдЫ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╣ ItemTouchHelper
рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ RecyclerView
рдореЗрдВ рдорд╛рдирдХ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдФрд░ рд╕реНрд╡рд╛рдЗрдк-рдЯреВ-рдПрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реЙрдк рдХреЗ рд╕рдордп рддрддреНрд╡реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗред
рд╕реНрд░реЛрдд рдХреЛрдб
рдореИрдВрдиреЗ рд▓реЗрдЦреЛрдВ рдХреА рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП GitHub рдкрд░ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛: Android-ItemTouchHelper-Demo ред рдкрд╣рд▓реА рдкреНрд░рддрд┐рдмрджреНрдз рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрд╕ рднрд╛рдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдФрд░ рджреВрд╕рд░реА рд╕реЗ рдереЛрдбрд╝реАред
тЖТ RecyclerView рдореЗрдВ рдЦреАрдВрдЪреЗрдВ рдФрд░ рд╕реНрд╡рд╛рдЗрдк рдХрд░реЗрдВред рднрд╛рдЧ 2: рдирд┐рдпрдВрддреНрд░рдХ, рдЧреНрд░рд┐рдб рдФрд░ рдХрд╕реНрдЯрдо рдПрдирд┐рдореЗрд╢рди рдЦреАрдВрдЪреЗрдВ рдФрд░ рдЫреЛрдбрд╝реЗрдВ