android侧滑删除item,Android使用ItemTouchHelper实现侧滑删除和拖拽

Android使用ItemTouchHelper实现侧滑删除和拖拽

发布时间:2020-10-03 05:54:52

来源:脚本之家

阅读:246

作者:showdy

本文实例为大家分享了如何使用ItemTouchHelper实现侧滑删除和拖拽的具体代码,供大家参考,具体内容如下

1. 定义一个简单bean类:public class ImgText {

public int resId;

public String des;

}

2. 实现一个RecyclerView.Adapterpublic class SwipeRecyclerAdapter extends RecyclerView.Adapter {

private List mList;

public SwipeRecyclerAdapter(List list) {

mList = list;

}

@Override

public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_swipe_recycler, parent, false);

return new MyHolder(view);

}

@Override

public void onBindViewHolder(MyHolder holder, int position) {

ImgText imgText = mList.get(position);

holder.img.setImageResource(imgText.resId);

holder.des.setText(imgText.des);

}

@Override

public int getItemCount() {

return mList.size();

}

public class MyHolder extends RecyclerView.ViewHolder {

private ImageView img;

private TextView des;

public MyHolder(View itemView) {

super(itemView);

img = (ImageView) itemView.findViewById(R.id.img);

des = (TextView) itemView.findViewById(R.id.text);

}

}

}

3.绘制分割线:public class DividerItemDecoration extends RecyclerView.ItemDecoration {

private static final int[] ATTRS = new int[]{android.R.attr.listDivider};

public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;

public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;

private Drawable mDivider;

private int mOrientation;

public DividerItemDecoration(Context context, int orientation) {

final TypedArray a = context.obtainStyledAttributes(ATTRS);

mDivider = a.getDrawable(0);

a.recycle();

setOrientation(orientation);

}

public void setOrientation(int orientation) {

if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {

throw new IllegalArgumentException("invalid orientation");

}

mOrientation = orientation;

}

@Override

public void onDraw(Canvas c, RecyclerView parent) {

if (mOrientation == VERTICAL_LIST) {

drawVertical(c, parent);

} else {

drawHorizontal(c, parent);

}

}

public void drawVertical(Canvas c, RecyclerView parent) {

final int left = parent.getPaddingLeft();

final int right = parent.getWidth() - parent.getPaddingRight();

final int childCount = parent.getChildCount();

for (int i = 0; i 

final View child = parent.getChildAt(i);

RecyclerView v = new RecyclerView(

parent.getContext());

final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child

.getLayoutParams();

final int top = child.getBottom() + params.bottomMargin;

final int bottom = top + mDivider.getIntrinsicHeight();

mDivider.setBounds(left, top, right, bottom);

mDivider.draw(c);

}

}

public void drawHorizontal(Canvas c, RecyclerView parent) {

final int top = parent.getPaddingTop();

final int bottom = parent.getHeight() - parent.getPaddingBottom();

final int childCount = parent.getChildCount();

for (int i = 0; i 

final View child = parent.getChildAt(i);

final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child

.getLayoutParams();

final int left = child.getRight() + params.rightMargin;

final int right = left + mDivider.getIntrinsicHeight();

mDivider.setBounds(left, top, right, bottom);

mDivider.draw(c);

}

}

@Override

public void getItemOffsets(Rect outRect, int itemPosition,

RecyclerView parent) {

if (mOrientation == VERTICAL_LIST) {

outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());

} else {

outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);

}

}

}

4. 实现ItemTouchHelper.Callback接口:public class SwipeCallback extends ItemTouchHelper.Callback {

private RecyclerView.Adapter extends RecyclerView.ViewHolder> mAdapter;

private List mList;

public SwipeCallback(RecyclerView.Adapter adapter, List list) {

mAdapter = adapter;

mList = list;

}

@Override

public boolean isLongPressDragEnabled() {

return true;

}

@Override

public boolean isItemViewSwipeEnabled() {

return true;

}

@Override

public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {

int dragFlag=ItemTouchHelper.UP|ItemTouchHelper.DOWN;

int swipeFlags=ItemTouchHelper.END|ItemTouchHelper.START;

return makeMovementFlags(dragFlag,swipeFlags);

}

//用于移动item的位置

@Override

public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {

Collections.swap(mList, viewHolder.getAdapterPosition(), target.getAdapterPosition());

mAdapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());

return true;

}

//一般用于滑动删除

@Override

public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {

mList.remove(viewHolder.getAdapterPosition());

mAdapter.notifyItemRemoved(viewHolder.getAdapterPosition());

}

}

5.编写侧滑删除和拖拽Activitypublic class SwipeRecyclerViewActivity extends AppCompatActivity {

private RecyclerView mRecyclerView;

private List mList;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_swipe_recycler);

mRecyclerView= (RecyclerView) findViewById(R.id.recycler);

mList=new ArrayList<>();

for (int i = 0; i 

ImgText it= new ImgText();

it.resId=R.mipmap.ic_launcher;

it.des=i+"侧滑删除文字";

mList.add(it);

}

final SwipeRecyclerAdapter adapter= new SwipeRecyclerAdapter(mList);

RecyclerView.LayoutManager manager= new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);

mRecyclerView.setLayoutManager(manager);

mRecyclerView.setItemAnimator(new DefaultItemAnimator());

mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));

mRecyclerView.setAdapter(adapter);

ItemTouchHelper swipeItemHelper= new ItemTouchHelper(new SwipeCallback<>(adapter,mList));

swipeItemHelper.attachToRecyclerView(mRecyclerView);

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值