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

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

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

2019-10-21 21:41:06
字體:
供稿:網(wǎng)友

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

1. 定義一個(gè)簡單bean類:

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

2. 實(shí)現(xiàn)一個(gè)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. 實(shí)現(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);  }  //用于移動(dòng)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;  }  //一般用于滑動(dòng)刪除  @Override  public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {    mList.remove(viewHolder.getAdapterPosition());    mAdapter.notifyItemRemoved(viewHolder.getAdapterPosition());  }}

5.編寫側(cè)滑刪除和拖拽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+"側(cè)滑刪除文字";      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);  }}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宝兴县| 南华县| 丰宁| 蒲城县| 宣汉县| 城固县| 舟曲县| 溆浦县| 家居| 巴东县| 宣汉县| 徐闻县| 班戈县| 富宁县| 探索| 宝鸡市| 惠州市| 平定县| 台东县| 大理市| 平原县| 柞水县| 泰州市| 寻甸| 苍梧县| 临城县| 城口县| 乌海市| 榆中县| 秦安县| 容城县| 肇东市| 安庆市| 蕲春县| 綦江县| 高邮市| 北辰区| 沂源县| 通渭县| 芦山县| 汝南县|