版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 你信不?性格可决定运气
- 新型数据基础设施发展研究报告-推动全闪存数据中心建设助力数字经济高质量发展
- 吉首大学《国际商务谈判》2021-2022学年第一学期期末试卷
- 吉林艺术学院《字体设计》2021-2022学年第一学期期末试卷
- 吉林艺术学院《文化政策法规》2021-2022学年第一学期期末试卷
- 吉林艺术学院《乐理Ⅱ》2021-2022学年第一学期期末试卷
- 2024年供应商付款优惠协议书模板
- 小型汽车租用协议书范文范本
- 吉林师范大学《音频处理与视频剪辑》2021-2022学年第一学期期末试卷
- 河道洗砂承包协议书范文模板
- 认识他人课件教学课件
- 2024年国家公务员考试行测(副省级)真题及答案解析
- 江苏省南通市2024-2025学年八年级上学期11月期中数学试题(无答案)
- 中国汽车刹车盘行业投资分析、市场运行态势研究报告-智研咨询发布
- 2024-2025学年初中音乐九年级上册湘艺版(2024)教学设计合集
- 2024-2025学年北师大版九年级数学上册期中综合复习题
- 第十五届全国交通运输行业“百通科信杯”机动车检测工(学生组)理论知识题库
- 小学高年级阅读指导课教案(12篇)
- 2023年中央机关遴选笔试真题及解析(B卷)
- 手机摄影PPT学习课件(摄影的七大要素)
- 柴油发电机组检测报告样本
评论
0/150
提交评论