国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android使用ItemTouchHelper實現(xiàn)側滑刪除和拖拽

2019-12-12 00:34:41
字體:
來源:轉載
供稿:網友

本文實例為大家分享了如何使用ItemTouchHelper實現(xiàn)側滑刪除和拖拽的具體代碼,供大家參考,具體內容如下

1. 定義一個簡單bean類:

public class ImgText {  public int resId;  public String des;}

2. 實現(xiàn)一個RecyclerView.Adapter

public class SwipeRecyclerAdapter extends RecyclerView.Adapter<SwipeRecyclerAdapter.MyHolder> {  private List<ImgText> mList;  public SwipeRecyclerAdapter(List<ImgText> 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 < childCount; 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 < childCount; 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. 實現(xiàn)ItemTouchHelper.Callback接口:

public class SwipeCallback<T> extends ItemTouchHelper.Callback {  private RecyclerView.Adapter<? extends RecyclerView.ViewHolder> mAdapter;  private List<T> mList;  public SwipeCallback(RecyclerView.Adapter adapter, List<T> 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.編寫側滑刪除和拖拽Activity

public class SwipeRecyclerViewActivity extends AppCompatActivity {  private RecyclerView mRecyclerView;  private List<ImgText> 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 < 20; 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);  }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 永寿县| 长垣县| 大港区| 营山县| 施秉县| 霸州市| 松潘县| 琼结县| 治多县| 大冶市| 巴南区| 合山市| 屏南县| 乌鲁木齐县| 芒康县| 开化县| 呈贡县| 栖霞市| 镇沅| 玉树县| 兴宁市| 师宗县| 东光县| 衢州市| 满城县| 衡水市| 涞水县| 定安县| 天门市| 伊金霍洛旗| 武穴市| 孟连| 双峰县| 日照市| 宜丰县| 客服| 南宫市| 福建省| 云霄县| 新蔡县| 凌海市|