Android?Recyclerview實現(xiàn)左滑刪除功能
本文實例為大家分享了Android Recyclerview實現(xiàn)左滑刪除的具體代碼,供大家參考,具體內(nèi)容如下

1.先創(chuàng)建一個工具類
SlideRecyclerView
public class SlideRecyclerView extends RecyclerView {
?
? ? private static final String TAG = "SlideRecyclerView";
? ? private static final int INVALID_POSITION = -1; // 觸摸到的點不在子View范圍內(nèi)
? ? private static final int INVALID_CHILD_WIDTH = -1; ?// 子ItemView不含兩個子View
? ? private static final int SNAP_VELOCITY = 600; ? // 最小滑動速度
?
? ? private VelocityTracker mVelocityTracker; ? // 速度追蹤器
? ? private int mTouchSlop; // 認為是滑動的最小距離(一般由系統(tǒng)提供)
? ? private Rect mTouchFrame; ? // 子View所在的矩形范圍
? ? private Scroller mScroller;
? ? private float mLastX; ? // 滑動過程中記錄上次觸碰點X
? ? private float mFirstX, mFirstY; // 首次觸碰范圍
? ? private boolean mIsSlide; ? // 是否滑動子View
? ? private ViewGroup mFlingView; ? // 觸碰的子View
? ? private int mPosition; ?// 觸碰的view的位置
? ? private int mMenuViewWidth; ? ?// 菜單按鈕寬度
?
? ? public SlideRecyclerView(Context context) {
? ? ? ? this(context, null);
? ? }
?
? ? public SlideRecyclerView(Context context, @Nullable AttributeSet attrs) {
? ? ? ? this(context, attrs, 0);
? ? }
?
? ? public SlideRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
? ? ? ? super(context, attrs, defStyle);
? ? ? ? mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
? ? ? ? mScroller = new Scroller(context);
? ? }
?
? ? @Override
? ? public boolean onInterceptTouchEvent(MotionEvent e) {
? ? ? ? int x = (int) e.getX();
? ? ? ? int y = (int) e.getY();
? ? ? ? obtainVelocity(e);
? ? ? ? switch (e.getAction()) {
? ? ? ? ? ? case MotionEvent.ACTION_DOWN:
? ? ? ? ? ? ? ? if (!mScroller.isFinished()) { ?// 如果動畫還沒停止,則立即終止動畫
? ? ? ? ? ? ? ? ? ? mScroller.abortAnimation();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? mFirstX = mLastX = x;
? ? ? ? ? ? ? ? mFirstY = y;
? ? ? ? ? ? ? ? mPosition = pointToPosition(x, y); ?// 獲取觸碰點所在的position
? ? ? ? ? ? ? ? if (mPosition != INVALID_POSITION) {
? ? ? ? ? ? ? ? ? ? View view = mFlingView;
? ? ? ? ? ? ? ? ? ? // 獲取觸碰點所在的view
? ? ? ? ? ? ? ? ? ? mFlingView = (ViewGroup) getChildAt(mPosition - ((LinearLayoutManager) getLayoutManager()).findFirstVisibleItemPosition());
? ? ? ? ? ? ? ? ? ? // 這里判斷一下如果之前觸碰的view已經(jīng)打開,而當前碰到的view不是那個view則立即關(guān)閉之前的view,此處并不需要擔動畫沒完成沖突,因為之前已經(jīng)abortAnimation
? ? ? ? ? ? ? ? ? ? if (view != null && mFlingView != view && view.getScrollX() != 0) {
? ? ? ? ? ? ? ? ? ? ? ? view.scrollTo(0, 0);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? // 這里進行了強制的要求,RecyclerView的子ViewGroup必須要有2個子view,這樣菜單按鈕才會有值,
? ? ? ? ? ? ? ? ? ? // 需要注意的是:如果不定制RecyclerView的子View,則要求子View必須要有固定的width。
? ? ? ? ? ? ? ? ? ? // 比如使用LinearLayout作為根布局,而content部分width已經(jīng)是match_parent,此時如果菜單view用的是wrap_content,menu的寬度就會為0。
? ? ? ? ? ? ? ? ? ? if (mFlingView.getChildCount() == 2) {
? ? ? ? ? ? ? ? ? ? ? ? mMenuViewWidth = mFlingView.getChildAt(1).getWidth();
? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? mMenuViewWidth = INVALID_CHILD_WIDTH;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case MotionEvent.ACTION_MOVE:
? ? ? ? ? ? ? ? mVelocityTracker.computeCurrentVelocity(1000);
? ? ? ? ? ? ? ? // 此處有倆判斷,滿足其一則認為是側(cè)滑:
? ? ? ? ? ? ? ? // 1.如果x方向速度大于y方向速度,且大于最小速度限制;
? ? ? ? ? ? ? ? // 2.如果x方向的側(cè)滑距離大于y方向滑動距離,且x方向達到最小滑動距離;
? ? ? ? ? ? ? ? float xVelocity = mVelocityTracker.getXVelocity();
? ? ? ? ? ? ? ? float yVelocity = mVelocityTracker.getYVelocity();
? ? ? ? ? ? ? ? if (Math.abs(xVelocity) > SNAP_VELOCITY && Math.abs(xVelocity) > Math.abs(yVelocity)
? ? ? ? ? ? ? ? ? ? ? ? || Math.abs(x - mFirstX) >= mTouchSlop
? ? ? ? ? ? ? ? ? ? ? ? && Math.abs(x - mFirstX) > Math.abs(y - mFirstY)) {
? ? ? ? ? ? ? ? ? ? mIsSlide = true;
? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case MotionEvent.ACTION_UP:
? ? ? ? ? ? ? ? releaseVelocity();
? ? ? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? return super.onInterceptTouchEvent(e);
? ? }
?
? ? @Override
? ? public boolean onTouchEvent(MotionEvent e) {
? ? ? ? if (mIsSlide && mPosition != INVALID_POSITION) {
? ? ? ? ? ? float x = e.getX();
? ? ? ? ? ? obtainVelocity(e);
? ? ? ? ? ? switch (e.getAction()) {
? ? ? ? ? ? ? ? case MotionEvent.ACTION_DOWN: ? // 因為沒有攔截,所以不會被調(diào)用到
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case MotionEvent.ACTION_MOVE:
? ? ? ? ? ? ? ? ? ? // 隨手指滑動
? ? ? ? ? ? ? ? ? ? if (mMenuViewWidth != INVALID_CHILD_WIDTH) {
? ? ? ? ? ? ? ? ? ? ? ? float dx = mLastX - x;
? ? ? ? ? ? ? ? ? ? ? ? if (mFlingView.getScrollX() + dx <= mMenuViewWidth
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? && mFlingView.getScrollX() + dx > 0) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? mFlingView.scrollBy((int) dx, 0);
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? mLastX = x;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case MotionEvent.ACTION_UP:
? ? ? ? ? ? ? ? ? ? if (mMenuViewWidth != INVALID_CHILD_WIDTH) {
? ? ? ? ? ? ? ? ? ? ? ? int scrollX = mFlingView.getScrollX();
? ? ? ? ? ? ? ? ? ? ? ? mVelocityTracker.computeCurrentVelocity(1000);
? ? ? ? ? ? ? ? ? ? ? ? // 此處有兩個原因決定是否打開菜單:
? ? ? ? ? ? ? ? ? ? ? ? // 1.菜單被拉出寬度大于菜單寬度一半;
? ? ? ? ? ? ? ? ? ? ? ? // 2.橫向滑動速度大于最小滑動速度;
? ? ? ? ? ? ? ? ? ? ? ? // 注意:之所以要小于負值,是因為向左滑則速度為負值
? ? ? ? ? ? ? ? ? ? ? ? if (mVelocityTracker.getXVelocity() < -SNAP_VELOCITY) { ? ?// 向左側(cè)滑達到側(cè)滑最低速度,則打開
? ? ? ? ? ? ? ? ? ? ? ? ? ? mScroller.startScroll(scrollX, 0, mMenuViewWidth - scrollX, 0, Math.abs(mMenuViewWidth - scrollX));
? ? ? ? ? ? ? ? ? ? ? ? } else if (mVelocityTracker.getXVelocity() >= SNAP_VELOCITY) { ?// 向右側(cè)滑達到側(cè)滑最低速度,則關(guān)閉
? ? ? ? ? ? ? ? ? ? ? ? ? ? mScroller.startScroll(scrollX, 0, -scrollX, 0, Math.abs(scrollX));
? ? ? ? ? ? ? ? ? ? ? ? } else if (scrollX >= mMenuViewWidth / 2) { // 如果超過刪除按鈕一半,則打開
? ? ? ? ? ? ? ? ? ? ? ? ? ? mScroller.startScroll(scrollX, 0, mMenuViewWidth - scrollX, 0, Math.abs(mMenuViewWidth - scrollX));
? ? ? ? ? ? ? ? ? ? ? ? } else { ? ?// 其他情況則關(guān)閉
? ? ? ? ? ? ? ? ? ? ? ? ? ? mScroller.startScroll(scrollX, 0, -scrollX, 0, Math.abs(scrollX));
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? invalidate();
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? mMenuViewWidth = INVALID_CHILD_WIDTH;
? ? ? ? ? ? ? ? ? ? mIsSlide = false;
? ? ? ? ? ? ? ? ? ? mPosition = INVALID_POSITION;
? ? ? ? ? ? ? ? ? ? releaseVelocity(); ?// 這里之所以會調(diào)用,是因為如果前面攔截了,就不會執(zhí)行ACTION_UP,需要在這里釋放追蹤
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? return true;
? ? ? ? } else {
? ? ? ? ? ? // 此處防止RecyclerView正?;瑒訒r,還有菜單未關(guān)閉
? ? ? ? ? ? closeMenu();
? ? ? ? ? ? // Velocity,這里的釋放是防止RecyclerView正常攔截了,但是在onTouchEvent中卻沒有被釋放;
? ? ? ? ? ? // 有三種情況:1.onInterceptTouchEvent并未攔截,在onInterceptTouchEvent方法中,DOWN和UP一對獲取和釋放;
? ? ? ? ? ? // 2.onInterceptTouchEvent攔截,DOWN獲取,但事件不是被側(cè)滑處理,需要在這里進行釋放;
? ? ? ? ? ? // 3.onInterceptTouchEvent攔截,DOWN獲取,事件被側(cè)滑處理,則在onTouchEvent的UP中釋放。
? ? ? ? ? ? releaseVelocity();
? ? ? ? }
? ? ? ? return super.onTouchEvent(e);
? ? }
?
? ? private void releaseVelocity() {
? ? ? ? if (mVelocityTracker != null) {
? ? ? ? ? ? mVelocityTracker.clear();
? ? ? ? ? ? mVelocityTracker.recycle();
? ? ? ? ? ? mVelocityTracker = null;
? ? ? ? }
? ? }
?
? ? private void obtainVelocity(MotionEvent event) {
? ? ? ? if (mVelocityTracker == null) {
? ? ? ? ? ? mVelocityTracker = VelocityTracker.obtain();
? ? ? ? }
? ? ? ? mVelocityTracker.addMovement(event);
? ? }
?
? ? public int pointToPosition(int x, int y) {
? ? ? ? if (null == getLayoutManager()) return INVALID_POSITION;
? ? ? ? int firstPosition = ((LinearLayoutManager) getLayoutManager()).findFirstVisibleItemPosition();
? ? ? ? Rect frame = mTouchFrame;
? ? ? ? if (frame == null) {
? ? ? ? ? ? mTouchFrame = new Rect();
? ? ? ? ? ? frame = mTouchFrame;
? ? ? ? }
?
? ? ? ? final int count = getChildCount();
? ? ? ? for (int i = count - 1; i >= 0; i--) {
? ? ? ? ? ? final View child = getChildAt(i);
? ? ? ? ? ? if (child.getVisibility() == View.VISIBLE) {
? ? ? ? ? ? ? ? child.getHitRect(frame);
? ? ? ? ? ? ? ? if (frame.contains(x, y)) {
? ? ? ? ? ? ? ? ? ? return firstPosition + i;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return INVALID_POSITION;
? ? }
?
? ? @Override
? ? public void computeScroll() {
? ? ? ? if (mScroller.computeScrollOffset()) {
? ? ? ? ? ? mFlingView.scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
? ? ? ? ? ? invalidate();
? ? ? ? }
? ? }
?
? ? /**
? ? ?* 將顯示子菜單的子view關(guān)閉
? ? ?* 這里本身是要自己來實現(xiàn)的,但是由于不定制item,因此不好監(jiān)聽器點擊事件,因此需要調(diào)用者手動的關(guān)閉
? ? ?*/
? ? public void closeMenu() {
? ? ? ? if (mFlingView != null && mFlingView.getScrollX() != 0) {
? ? ? ? ? ? mFlingView.scrollTo(0, 0);
? ? ? ? }
? ? }
}2.主布局
<com.xxx.xxx.SlideRecyclerView ? ? android:id="@+id/shoppingtrolley_rv" ? ? android:layout_width="match_parent" ? ? android:layout_height="wrap_content" />
3.子布局
adapter_shoppingtrollery
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ? ? android:layout_width="match_parent" ? ? android:layout_height="wrap_content" ? ? android:orientation="horizontal" ? ? android:background="#FFF8F8F8" ? ? android:clickable="true"> ? ? ? <RelativeLayout ? ? ? ? android:layout_width="match_parent" ? ? ? ? android:layout_height="@dimen/dp_133" ? ? ? ? android:layout_marginTop="@dimen/dp_12" ? ? ? ? android:background="@color/white"> ? ? ? ? <CheckBox ? ? ? ? ? ? android:id="@+id/shoppingtrollery_ischeck" ? ? ? ? ? ? android:layout_width="@dimen/dp_20" ? ? ? ? ? ? android:layout_height="@dimen/dp_20" ? ? ? ? ? ? android:button="@null" ? ? ? ? ? ? android:background="@drawable/shoppingtrollery_selector" ? ? ? ? ? ? android:layout_marginStart="@dimen/dp_14" ? ? ? ? ? ? android:layout_centerVertical="true"/> ? ? ? ? <ImageView ? ? ? ? ? ? android:id="@+id/shoppingtrollery_iv" ? ? ? ? ? ? android:layout_width="@dimen/dp_100" ? ? ? ? ? ? android:layout_height="@dimen/dp_100" ? ? ? ? ? ? android:src="@mipmap/logo" ? ? ? ? ? ? android:layout_toEndOf="@+id/shoppingtrollery_ischeck" ? ? ? ? ? ? android:layout_centerVertical="true" ? ? ? ? ? ? android:layout_marginStart="@dimen/dp_11"/> ? ? ? ? <TextView ? ? ? ? ? ? android:id="@+id/shoppingtrollery_name" ? ? ? ? ? ? android:layout_width="wrap_content" ? ? ? ? ? ? android:layout_height="wrap_content" ? ? ? ? ? ? android:text="超級團品polo衫" ? ? ? ? ? ? android:textSize="@dimen/sp_16" ? ? ? ? ? ? android:textColor="@color/_333333" ? ? ? ? ? ? android:layout_toEndOf="@+id/shoppingtrollery_iv" ? ? ? ? ? ? android:layout_marginTop="@dimen/dp_22" ? ? ? ? ? ? android:layout_marginStart="@dimen/dp_14" ? ? ? ? ? ? android:textStyle="bold"/> ? ? ? ? <TextView ? ? ? ? ? ? android:id="@+id/shoppingtrollery_type" ? ? ? ? ? ? android:layout_width="wrap_content" ? ? ? ? ? ? android:layout_height="wrap_content" ? ? ? ? ? ? android:text="2瓶裝套裝" ? ? ? ? ? ? android:textSize="@dimen/sp_12" ? ? ? ? ? ? android:textColor="@color/_333333" ? ? ? ? ? ? android:layout_toEndOf="@+id/shoppingtrollery_iv" ? ? ? ? ? ? android:layout_below="@+id/shoppingtrollery_name" ? ? ? ? ? ? android:layout_marginTop="@dimen/dp_12" ? ? ? ? ? ? android:layout_marginStart="@dimen/dp_14"/> ? ? ? ? <LinearLayout ? ? ? ? ? ? android:layout_width="wrap_content" ? ? ? ? ? ? android:layout_height="wrap_content" ? ? ? ? ? ? android:orientation="horizontal" ? ? ? ? ? ? android:layout_below="@+id/shoppingtrollery_type" ? ? ? ? ? ? android:layout_marginTop="@dimen/dp_6" ? ? ? ? ? ? android:layout_toEndOf="@+id/shoppingtrollery_iv" ? ? ? ? ? ? android:layout_marginStart="@dimen/dp_11"> ? ? ? ? ? ? <TextView ? ? ? ? ? ? ? ? android:layout_width="wrap_content" ? ? ? ? ? ? ? ? android:layout_height="wrap_content" ? ? ? ? ? ? ? ? android:text="¥" ? ? ? ? ? ? ? ? android:textSize="@dimen/sp_12" ? ? ? ? ? ? ? ? android:textColor="@color/black" ? ? ? ? ? ? ? ? android:textStyle="bold"/> ? ? ? ? ? ? <TextView ? ? ? ? ? ? ? ? android:id="@+id/shoppingtrollery_price" ? ? ? ? ? ? ? ? android:layout_width="wrap_content" ? ? ? ? ? ? ? ? android:layout_height="wrap_content" ? ? ? ? ? ? ? ? android:text="400.00" ? ? ? ? ? ? ? ? android:textSize="@dimen/sp_18" ? ? ? ? ? ? ? ? android:textColor="@color/black" ? ? ? ? ? ? ? ? android:textStyle="bold"/> ? ? ? ? </LinearLayout> ? ? ? ? <LinearLayout ? ? ? ? ? ? android:layout_width="@dimen/dp_72" ? ? ? ? ? ? android:layout_height="@dimen/dp_24" ? ? ? ? ? ? android:orientation="horizontal" ? ? ? ? ? ? android:layout_alignParentEnd="true" ? ? ? ? ? ? android:layout_marginEnd="@dimen/dp_12" ? ? ? ? ? ? android:layout_alignParentBottom="true" ? ? ? ? ? ? android:layout_marginBottom="@dimen/dp_17" ? ? ? ? ? ? android:background="@drawable/shoppingtrollery_adddelete_bg"> ? ? ? ? ? ? <TextView ? ? ? ? ? ? ? ? android:id="@+id/shoppingtrollery_subtract" ? ? ? ? ? ? ? ? android:layout_width="@dimen/dp_0" ? ? ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? ? ? android:text="-" ? ? ? ? ? ? ? ? android:textColor="@color/_333333" ? ? ? ? ? ? ? ? android:textSize="@dimen/sp_15" ? ? ? ? ? ? ? ? android:gravity="center" ? ? ? ? ? ? ? ? android:textStyle="bold"/> ? ? ? ? ? ? <TextView ? ? ? ? ? ? ? ? android:id="@+id/shoppingtrollery_count" ? ? ? ? ? ? ? ? android:layout_width="@dimen/dp_0" ? ? ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? ? ? android:text="1" ? ? ? ? ? ? ? ? android:textColor="@color/_333333" ? ? ? ? ? ? ? ? android:textSize="@dimen/sp_15" ? ? ? ? ? ? ? ? android:gravity="center" ? ? ? ? ? ? ? ? android:textStyle="bold"/> ? ? ? ? ? ? <TextView ? ? ? ? ? ? ? ? android:id="@+id/shoppingtrollery_add" ? ? ? ? ? ? ? ? android:layout_width="@dimen/dp_0" ? ? ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? ? ? android:text="+" ? ? ? ? ? ? ? ? android:textColor="@color/_333333" ? ? ? ? ? ? ? ? android:textSize="@dimen/sp_15" ? ? ? ? ? ? ? ? android:gravity="center" ? ? ? ? ? ? ? ? android:textStyle="bold"/> ? ? ? ? </LinearLayout> ? ? </RelativeLayout> ? ? <LinearLayout ? ? ? ? android:layout_width="@dimen/dp_84" ? ? ? ? android:layout_height="match_parent" ? ? ? ? android:orientation="horizontal"> ? ? ? ? <TextView ? ? ? ? ? ? android:id="@+id/shoppingtrollery_delete" ? ? ? ? ? ? android:layout_width="match_parent" ? ? ? ? ? ? android:layout_height="match_parent" ? ? ? ? ? ? android:background="#FFE6212A" ? ? ? ? ? ? android:gravity="center" ? ? ? ? ? ? android:text="刪除" ? ? ? ? ? ? android:textColor="@color/white" ? ? ? ? ? ? android:textSize="@dimen/sp_16" /> ? ? </LinearLayout> </LinearLayout>
4.適配器
ShoppingtrolleyAdapter
public class ShoppingtrolleyAdapter extends RecyclerView.Adapter<ShoppingtrolleyAdapter.Myvh> {
?
? ? Context context;
? ? List<String> list;
? ? private OnItemClickListener mOnItemClickListener;
?
? ? public ShoppingtrolleyAdapter(Context context) {
? ? ? ? this.context = context;
? ? ? ? list = new ArrayList<>();
? ? }
?
? ? public void setList(List<String> list) {
? ? ? ? this.list = list;
? ? ? ? notifyDataSetChanged();
? ? }
?
? ? public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
? ? ? ? mOnItemClickListener = onItemClickListener;
? ? }
?
? ? public interface OnItemClickListener {
? ? ? ? void onItemClick(View view, int position);
? ? }
?
? ? @NonNull
? ? @NotNull
? ? @Override
? ? public ShoppingtrolleyAdapter.Myvh onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
? ? ? ? View view = LayoutInflater.from(context).inflate(R.layout.adapter_shoppingtrollery,parent,false);
? ? ? ? return new ShoppingtrolleyAdapter.Myvh(view);
? ? }
?
? ? @SuppressLint("SetTextI18n")
? ? @Override
? ? public void onBindViewHolder(@NonNull @NotNull ShoppingtrolleyAdapter.Myvh holder, int position) {
?
? ? ? ? //左滑刪除事件
? ? ? ? holder.shoppingtrollery_delete.setOnClickListener(new View.OnClickListener() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void onClick(View v) {
? ? ? ? ? ? ? ? if (mOnItemClickListener != null) {
? ? ? ? ? ? ? ? ? ? mOnItemClickListener.onItemClick(v, position);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? }
?
? ? @Override
? ? public int getItemCount() {
? ? ? ? return list.size();
? ? }
?
? ? public class Myvh extends RecyclerView.ViewHolder {
?
? ? ? ? private final CheckBox shoppingtrollery_ischeck;
? ? ? ? private final ImageView shoppingtrollery_iv;
? ? ? ? private final TextView shoppingtrollery_name;
? ? ? ? private final TextView shoppingtrollery_type;
? ? ? ? private final TextView shoppingtrollery_price;
? ? ? ? private final TextView shoppingtrollery_subtract;
? ? ? ? private final TextView shoppingtrollery_count;
? ? ? ? private final TextView shoppingtrollery_add;
? ? ? ? private final TextView shoppingtrollery_delete;
?
? ? ? ? public Myvh(@NonNull @NotNull View itemView) {
? ? ? ? ? ? super(itemView);
?
? ? ? ? ? ? shoppingtrollery_ischeck = itemView.findViewById(R.id.shoppingtrollery_ischeck);
? ? ? ? ? ? shoppingtrollery_iv = itemView.findViewById(R.id.shoppingtrollery_iv);
? ? ? ? ? ? shoppingtrollery_name = itemView.findViewById(R.id.shoppingtrollery_name);
? ? ? ? ? ? shoppingtrollery_type = itemView.findViewById(R.id.shoppingtrollery_type);
? ? ? ? ? ? shoppingtrollery_price = itemView.findViewById(R.id.shoppingtrollery_price);
? ? ? ? ? ? shoppingtrollery_subtract = itemView.findViewById(R.id.shoppingtrollery_subtract);
? ? ? ? ? ? shoppingtrollery_count = itemView.findViewById(R.id.shoppingtrollery_count);
? ? ? ? ? ? shoppingtrollery_add = itemView.findViewById(R.id.shoppingtrollery_add);
? ? ? ? ? ? shoppingtrollery_delete = itemView.findViewById(R.id.shoppingtrollery_delete);
? ? ? ? }
? ? }
}5.主頁代碼
/**
? ? ?* 購物車列表
? ? ?*/
? ? private void setlistdata() {
?
? ? ? ? SlideRecyclerView shoppingtrolley_rv = findViewById(R.id.shoppingtrolley_rv);
? ? ? ? // 創(chuàng)建布局管理
? ? ? ? LinearLayoutManager layoutManager = new LinearLayoutManager(this);
? ? ? ? layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
? ? ? ? shoppingtrolley_rv.setLayoutManager(layoutManager);
?
? ? ? ? //模擬數(shù)據(jù)
? ? ? ? List<String> list = new ArrayList<>();
? ? ? ? list.add("a");
? ? ? ? list.add("a");
? ? ? ? list.add("a");
? ? ? ? list.add("a");
? ? ? ? list.add("a");
? ? ? ? ShoppingtrolleyAdapter shoppingtrolleyAdapter = new ShoppingtrolleyAdapter(this);
? ? ? ? shoppingtrolleyAdapter.setList(list);
? ? ? ? shoppingtrolley_rv.setAdapter(shoppingtrolleyAdapter);
?
? ? ? ? //左滑刪除
? ? ? ? shoppingtrolleyAdapter.setOnItemClickListener(new ShoppingtrolleyAdapter.OnItemClickListener() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void onItemClick(View view, int position) {
? ? ? ? ? ? ? ? list.remove(position);
? ? ? ? ? ? ? ? shoppingtrolleyAdapter.notifyDataSetChanged();
? ? ? ? ? ? ? ? //Toast.makeText(ShoppingtrolleyActivity.this, ""+position, Toast.LENGTH_SHORT).show();
? ? ? ? ? ? }
? ? ? ? });
}以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android調(diào)用系統(tǒng)的發(fā)郵件功能的小例子
這篇文章介紹了Android調(diào)用系統(tǒng)的發(fā)郵件功能的小例子,有需要的朋友可以參考一下2013-08-08
Android 設(shè)置Edittext獲取焦點并彈出軟鍵盤
本文主要介紹了Android設(shè)置Edittext獲取焦點并彈出軟鍵盤的實現(xiàn)代碼。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04
Android?自定義View?加?lifecycle?簡單使用詳解
本文介紹了自定義View的基本使用方法,包括onMeasure、onDraw、自定義樣式和lifecycle的使用,通過了解MeasureSpec的作用和lifecycle的控制,可以更好地管理View的生命周期,避免內(nèi)存泄露問題,感興趣的朋友一起看看吧2025-03-03
Android自定義SeekBar實現(xiàn)滑動驗證且不可點擊
這篇文章主要為大家詳細介紹了Android自定義SeekBar實現(xiàn)滑動驗證且不可點擊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-03-03
Android中封裝RecyclerView實現(xiàn)添加頭部和底部示例代碼
這篇文章主要給大家介紹了關(guān)于Android中封裝RecyclerView實現(xiàn)添加頭部和底部的相關(guān)資料,網(wǎng)上這方面的資料很多,但都不是自己需要的,索性自己寫一個分享出來供大家參考學(xué)習(xí),需要的朋友們下面隨著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
詳解Android開發(fā)數(shù)據(jù)持久化之文件存儲(附源碼)
本篇文章主要介紹了詳解Android開發(fā)數(shù)據(jù)持久化之文件存儲(附源碼),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03

