【移动应用开发技术】android ItemTouchHelper如何实现可拖拽和侧滑的列表_第1页
【移动应用开发技术】android ItemTouchHelper如何实现可拖拽和侧滑的列表_第2页
【移动应用开发技术】android ItemTouchHelper如何实现可拖拽和侧滑的列表_第3页
【移动应用开发技术】android ItemTouchHelper如何实现可拖拽和侧滑的列表_第4页
【移动应用开发技术】android ItemTouchHelper如何实现可拖拽和侧滑的列表_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】androidItemTouchHelper如何实现可拖拽和侧滑的列表

/upload/information/20200623/125/124115.gif实现基本功能布局文件<?xml

version="1.0"

encoding="utf-8"?>

<LinearLayout

xmlns:android="/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

<android.support.v7.widget.RecyclerView

android:layout_width="match_parent"

android:layout_height="match_parent"

android:id="@+id/main_recyclerView"

android:scrollbars="none"

android:background="#F2F8FC">

</android.support.v7.widget.RecyclerView>

</LinearLayout><?xml

version="1.0"

encoding="utf-8"?>

<android.support.constraint.ConstraintLayout

xmlns:android="/apk/res/android"

xmlns:app="/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="60dp"

android:background="#ffffff">

<ImageView

android:id="@+id/item_list_menu_imageView"

android:layout_width="30dp"

android:layout_height="25dp"

android:layout_marginBottom="8dp"

android:layout_marginStart="15dp"

android:layout_marginTop="8dp"

android:src="@drawable/imageview_menu"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toTopOf="parent"

/>

<TextView

android:id="@+id/item_list_text_textView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginBottom="8dp"

android:layout_marginStart="15dp"

android:layout_marginTop="8dp"

android:textColor="#000000"

android:textSize="18sp"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintStart_toEndOf="@+id/item_list_menu_imageView"

app:layout_constraintTop_toTopOf="parent"/>

<android.support.v7.widget.SwitchCompat

android:id="@+id/item_list_switchCompat"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginBottom="8dp"

android:layout_marginEnd="15dp"

android:layout_marginTop="8dp"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintTop_toTopOf="parent"

/>

</android.support.constraint.ConstraintLayout>ItemTouchHelperpublic

interface

IItemTouchHelperAdapter

{

/**

*

当item被移动时调用

*

*

@param

fromPosition

被操作的item的起点

*

@param

toPosition

被操作的item的终点

*/

void

onItemMove(int

fromPosition,

int

toPosition);

/**

*

当item被侧滑时调用

*

*

@param

position

被侧滑的item的position

*/

void

onItemDismiss(int

position);

}

@Override

public

void

onItemMove(int

fromPosition,

int

toPosition)

{

Collections.swap(mList,

fromPosition,

toPosition);

notifyItemMoved(fromPosition,

toPosition);

}

@Override

public

void

onItemDismiss(int

position)

{

mList.remove(position);

notifyItemRemoved(position);

}public

class

MyItemTouchHelperCallback

extends

ItemTouchHelper.Callback

{

private

IItemTouchHelperAdapter

mAdapter;

public

MyItemTouchHelperCallback(IItemTouchHelperAdapter

mAdapter)

{

this.mAdapter

=

mAdapter;

}

@Override

public

int

getMovementFlags(RecyclerView

recyclerView,

RecyclerView.ViewHolder

viewHolder)

{

//上下拖拽,若有其他需求同理

int

dragFlags

=

ItemTouchHelper.UP

|

ItemTouchHelper.DOWN;

//向右侧滑,若有其他需求同理

int

swipeFlags

=

ItemTouchHelper.RIGHT;

return

makeMovementFlags(dragFlags,

swipeFlags);

}

@Override

public

boolean

onMove(RecyclerView

recyclerView,

RecyclerView.ViewHolder

viewHolder,

RecyclerView.ViewHolder

target)

{

//通知Adapter更新数据和视图

mAdapter.onItemMove(viewHolder.getAdapterPosition(),

target.getAdapterPosition());

//若返回false则表示不支持上下拖拽

return

true;

}

@Override

public

void

onSwiped(RecyclerView.ViewHolder

viewHolder,

int

direction)

{

//通知Adapter更新数据和视图

mAdapter.onItemDismiss(viewHolder.getAdapterPosition());

}

@Override

public

boolean

isItemViewSwipeEnabled()

{

//是否可以左右侧滑,默认返回true

return

true;

}

@Override

public

boolean

isLongPressDragEnabled()

{

//是否可以长按上下拖拽,默认返回false

return

true;

}

}mItemTouchHelper

=

new

ItemTouchHelper(new

MyItemTouchHelperCallback(adapter));

mItemTouchHelper.attachToRecyclerView(recyclerView);/upload/information/20200623/125/124116.gif完善通过按住item左边按钮才能上下拖拽@Override

public

boolean

isLongPressDragEnabled()

{

//禁止长按item可以上下拖拽,因为我们要自定义开启拖拽的时机

return

false;

}public

interface

OnStartDragListener

{

/**

*

当View需要拖拽时回调

*

*

@param

viewHolder

The

holder

of

view

to

drag

*/

void

onStartDrag(RecyclerView.ViewHolder

viewHolder);

}@Override

public

void

onStartDrag(RecyclerView.ViewHolder

viewHolder)

{

//通知ItemTouchHelper开始拖拽

mItemTouchHelper.startDrag(viewHolder);

}public

class

RecyclerViewAdapter

extends

RecyclerView.Adapter<RecyclerViewAdapter.IItemViewHolder>

implements

IItemTouchHelperAdapter

{

//构造方法

public

RecyclerViewAdapter(List<ItemEntity>

list,

OnStartDragListener

mDragListener)

{

mList

=

list;

this.mDragListener

=

mDragListener;

}

...

@Override

public

void

onBindViewHolder(final

IItemViewHolder

holder,

@SuppressLint("RecyclerView")

final

int

position)

{

...

holder.menu.setOnTouchListener(new

View.OnTouchListener()

{

@Override

public

boolean

onTouch(View

view,

MotionEvent

motionEvent)

{

if

(motionEvent.getAction()

==

MotionEvent.ACTION_DOWN)

{

//通知ItemTouchHelper开始拖拽

mDragListener.onStartDrag(holder);

}

return

false;

}

});

}

...

}public

interface

IItemTouchHelperViewHolder

{

/**

*

item被选中,在侧滑或拖拽过程中更新状态

*/

void

onItemSelected();

/**

*

item的拖拽或侧滑结束,恢复默认的状态

*/

void

onItemClear();

}

class

ItemViewHolder

extends

RecyclerView.ViewHolder

implements

IItemTouchHelperViewHolder

{

private

TextView

text;

private

ImageView

menu;

private

SwitchCompat

switchCompat;

ItemViewHolder(View

itemView)

{

super(itemView);

text

=

itemView.findViewById(R.id.item_list_text_textView);

menu

=

itemView.findViewById(R.id.item_list_menu_imageView);

switchCompat

=

itemView.findViewById(R.id.item_list_switchCompat);

}

@Override

public

void

onItemSelected()

{

itemView.setTranslationZ(10);

}

@Override

public

void

onItemClear()

{

itemView.setTranslationZ(0);

}

}

@Override

public

void

onSelectedChanged(RecyclerView.ViewHolder

viewHolder,

int

actionState)

{

if

(actionState

!=

ItemTouchHelper.ACTION_ST

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论