網站首頁 編程語言 正文
本文實例為大家分享了Android Recyclerview實現左滑刪除的具體代碼,供大家參考,具體內容如下
1.先創建一個工具類
SlideRecyclerView
public class SlideRecyclerView extends RecyclerView {
?
? ? private static final String TAG = "SlideRecyclerView";
? ? private static final int INVALID_POSITION = -1; // 觸摸到的點不在子View范圍內
? ? private static final int INVALID_CHILD_WIDTH = -1; ?// 子ItemView不含兩個子View
? ? private static final int SNAP_VELOCITY = 600; ? // 最小滑動速度
?
? ? private VelocityTracker mVelocityTracker; ? // 速度追蹤器
? ? private int mTouchSlop; // 認為是滑動的最小距離(一般由系統提供)
? ? 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已經打開,而當前碰到的view不是那個view則立即關閉之前的view,此處并不需要擔動畫沒完成沖突,因為之前已經abortAnimation
? ? ? ? ? ? ? ? ? ? if (view != null && mFlingView != view && view.getScrollX() != 0) {
? ? ? ? ? ? ? ? ? ? ? ? view.scrollTo(0, 0);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? // 這里進行了強制的要求,RecyclerView的子ViewGroup必須要有2個子view,這樣菜單按鈕才會有值,
? ? ? ? ? ? ? ? ? ? // 需要注意的是:如果不定制RecyclerView的子View,則要求子View必須要有固定的width。
? ? ? ? ? ? ? ? ? ? // 比如使用LinearLayout作為根布局,而content部分width已經是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);
? ? ? ? ? ? ? ? // 此處有倆判斷,滿足其一則認為是側滑:
? ? ? ? ? ? ? ? // 1.如果x方向速度大于y方向速度,且大于最小速度限制;
? ? ? ? ? ? ? ? // 2.如果x方向的側滑距離大于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: ? // 因為沒有攔截,所以不會被調用到
? ? ? ? ? ? ? ? ? ? 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) { ? ?// 向左側滑達到側滑最低速度,則打開
? ? ? ? ? ? ? ? ? ? ? ? ? ? mScroller.startScroll(scrollX, 0, mMenuViewWidth - scrollX, 0, Math.abs(mMenuViewWidth - scrollX));
? ? ? ? ? ? ? ? ? ? ? ? } else if (mVelocityTracker.getXVelocity() >= SNAP_VELOCITY) { ?// 向右側滑達到側滑最低速度,則關閉
? ? ? ? ? ? ? ? ? ? ? ? ? ? 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 { ? ?// 其他情況則關閉
? ? ? ? ? ? ? ? ? ? ? ? ? ? mScroller.startScroll(scrollX, 0, -scrollX, 0, Math.abs(scrollX));
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? invalidate();
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? mMenuViewWidth = INVALID_CHILD_WIDTH;
? ? ? ? ? ? ? ? ? ? mIsSlide = false;
? ? ? ? ? ? ? ? ? ? mPosition = INVALID_POSITION;
? ? ? ? ? ? ? ? ? ? releaseVelocity(); ?// 這里之所以會調用,是因為如果前面攔截了,就不會執行ACTION_UP,需要在這里釋放追蹤
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? return true;
? ? ? ? } else {
? ? ? ? ? ? // 此處防止RecyclerView正常滑動時,還有菜單未關閉
? ? ? ? ? ? closeMenu();
? ? ? ? ? ? // Velocity,這里的釋放是防止RecyclerView正常攔截了,但是在onTouchEvent中卻沒有被釋放;
? ? ? ? ? ? // 有三種情況:1.onInterceptTouchEvent并未攔截,在onInterceptTouchEvent方法中,DOWN和UP一對獲取和釋放;
? ? ? ? ? ? // 2.onInterceptTouchEvent攔截,DOWN獲取,但事件不是被側滑處理,需要在這里進行釋放;
? ? ? ? ? ? // 3.onInterceptTouchEvent攔截,DOWN獲取,事件被側滑處理,則在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關閉
? ? ?* 這里本身是要自己來實現的,但是由于不定制item,因此不好監聽器點擊事件,因此需要調用者手動的關閉
? ? ?*/
? ? 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);
? ? ? ? // 創建布局管理
? ? ? ? LinearLayoutManager layoutManager = new LinearLayoutManager(this);
? ? ? ? layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
? ? ? ? shoppingtrolley_rv.setLayoutManager(layoutManager);
?
? ? ? ? //模擬數據
? ? ? ? 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();
? ? ? ? ? ? }
? ? ? ? });
}
原文鏈接:https://blog.csdn.net/weixin_42630638/article/details/118491312
相關推薦
- 2023-11-16 當pytorch找不到 CUDA 時,如何修復錯誤:版本 libcublasLt.so.11 未在帶
- 2022-09-04 Apache?Kafka?分區重分配的實現原理解析_Linux
- 2022-07-23 C語言簡明分析指針與引用的具體用法_C 語言
- 2022-07-03 C#入門之定義類成員與接口實現_C#教程
- 2022-05-10 Element-ui 中 Select 選擇器下拉框樣式及輸入框樣式的修改問題(背景色透明與懸停背景
- 2022-10-12 python?time時間庫詳解_python
- 2022-05-15 react底層的四大核心內容架構詳解_React
- 2022-01-05 el-select使用了多選時,選中多個會撐開原始高度,樣式錯亂,使用tag展示,一行顯示全部內容,
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支